এখন গত উদাহরণের মহাকর্ষীয় বলকে পরিবর্তন করে এবং ঘর্ষণ বলকে (friction force) উপস্থাপনের মাধ্যমে বলগুলোকে আরেকটু কার্যকর করা যাক।

পৃথিবীতে মহাকর্ষ (Gravity)

You may have noticed something woefully inaccurate about this last example. The smaller the circle, the faster it falls. There is a logic to this; after all, we just stated (according to Newton’s second law) that the smaller the mass, the higher the acceleration.
But this is not what happens in the real world. If you were to climb to the top of the Leaning Tower of Pisa and drop two balls of different masses, which one will hit the ground first? According to legend, Galileo performed this exact test in 1589, discovering that they fell with the same acceleration, hitting the ground at the same time.
Why is this? As we will see later in this course, the force of gravity is calculated relative to an object’s mass. The bigger the object, the stronger the force. So if the force is scaled according to mass, the mass is canceled out when force is divided by mass. We can implement this in our program by multiplying our made-up acceleration (due to gravity) by mass:
for (var i = 0; i < movers.length; i++) {
    gravity.set(0, 0.1 * movers[i].mass);
    movers[i].applyForce(gravity);
    …
}
যদিও এখন বস্তুগুলো একই হারে পড়ছে, wind (বায়ুর) বল স্বয়ংসম্পূর্ণ হওয়ার কারণে, ছোট বস্তুগুলো বেশ তাড়াতাড়ি ডানদিকে ত্বরান্বিত হবে।
সত্যিই বল তৈরি করা আমাদের অনেক কিছু শিখতে সাহায্য করে। ProcessingJS হল পিক্সেলের জগৎ এবং আমরা এটার নিয়ন্ত্রণকারী। এজন্য যেই বল উপযুক্ত মনে হবে, সেটাই আমরা তৈরি করবো। যাই হোক, এমন এক সময় আসতে পারে যখন নিজের থেকে প্রশ্ন আসবে: “কিন্তু এটা কিভাবে কাজ করে?”
উচ্চ মাধ্যমিক পদার্থ বিজ্ঞান বইয়ে বিভিন্ন বল সংক্রান্ত চিত্র ও সূত্র রয়েছে—মহাকর্ষ বল (gravity), তড়িৎ চৌম্বক বল (electromagnetism), ঘর্ষণ বল (friction), টান (tension), স্প্রিং বল (elasticity) ইত্যাদি। অথবা, খান একাডেমির পদার্থ বিজ্ঞানের অনুশীলনী দেখলেও অনেক কিছু জানা যাবে। এই অংশে, আমরা দুইটি বল নিয়ে কাজ করবো—ঘর্ষণ বল এবং মহাকর্ষ বল। ProcessingJS এর সবগুলো প্রোগ্রামে ঘর্ষণ এবং মহাকর্ষ উভয় মৌলিক বল প্রায় আবশ্যক। কিন্তু এটা মূল বিষয় নয়, আমরা এই দুইটি বল নিয়ে নিচের পর্যালোচনার জন্য কাজ করবো:
  • বলের তাত্ত্বিক বিষয় আয়ত্ত করা
  • বলের সূত্রকে দুইভাগে ভাগ করা:
    • কিভাবে বলের দিক বের করবো?
    • কিভাবে বলের মান বের করবো?
  • সেই সুত্রগুলো ProcessingJS এর কোডে রুপান্তর করা, যা একটি PVector কে Mover এর applyForce() ফাংশনে পাঠায়।
আমরা যদি দুইটি বলের ক্ষেত্রে উপরের নিয়ম মোতাবেক কাজ করি, আশা করা যায়, তারপর যে কোন বল যেমন “দুর্বল নিউক্লীয় বল (atomic nuclei weak nuclear force)”, আমরা ProcessingJS প্রোগ্রামে ব্যবহার করতে পারবো।
সূত্র নিয়ে কাজ করা
ঠিক আছে, এখন আমরা ঘর্ষণ বলের সূত্রটি লিখবো। এই কোর্সে এরকম ব্যবহৃত সূত্র এই প্রথমবার নয়; নিউটনের দ্বিতীয় সূত্র নিয়ে আলোচনা আমরা ইতোমধ্যেই শেষ করেছি, F=M×A \vec{F} = M \times \vec{A} ​ (অথবা force (বল) = mass (ভর) * acceleration (ত্বরণ))। এই সূত্রটি খুবই সরল হবার কারণে আমরা এই সুত্র নিয়ে বেশি আলোচনা করিনি। যাই হোক, এমন অনেক সূত্র আছে যা বেশ জটিল। এখানে “স্বাভাবিক” বণ্টনের একটি সমীকরণ দেওয়া হল, যা (সূত্র না দেখে) পরিচিতি পর্বেই জানা হয়েছে।
f(x,μ,σ)=1σ2πe((xμ)22σ2) \displaystyle f(x,\mu,\sigma)={\frac{1}{\sigma\sqrt {2\pi}}}e^{\left({-{\dfrac {(x-\mu)^{2}}{2\sigma^{2}}}}\right)}
সূত্রে বিভিন্ন চিহ্ন ব্যবহার করা হয় (বেশিরভাগই গ্রীক অক্ষর)। এখন, ঘর্ষণ বলের (friction force) সূত্রটি দেখা যাক।
সূত্র দেখার এবং এটার কার্যকারিতা বোঝার জন্য কিছু গুরুত্বপূর্ণ বিষয় রয়েছে, এই বিষয়গুলো সম্পর্কে জানা আমাদের জন্য আবশ্যক।
  • ডানপক্ষে মান নির্ণয় করে, বামপক্ষে মান বসানো। এটা কোডের মতই! যে কোন সমীকরণে আমরা ডানপক্ষের মান বের করি এবং বামপক্ষে সেই মান বসাই। উপরিউক্ত ক্ষেত্রে, আমরা ঘর্ষণ বল বের করতে চাই—বামপক্ষ দ্বারা বোঝায় আমাদের কি বের করা লাগবে এবং ডানপক্ষে আমরা সেটা বের করি।
  • ভেক্টর নাকি স্কেলার রাশি নিয়ে আমরা কথা বলছি? এটা জানা খুবই গুরুত্বপূর্ণ যে কিছু কিছু ক্ষেত্রে, আমরা ভেক্টর রাশি নিয়ে কাজ করব এবং অন্য কিছু ক্ষেত্রে আমরা স্কেলার রাশি দেখবো। উদাহরণস্বরূপ, ঘর্ষণ বল হল একটি ভেক্টর রাশি। আমরা “friction” (ঘর্ষণ) শব্দটির উপরের তীর চিহ্ন দেখেই বুঝতে পারছি যে এটা একটি ভেক্টর রাশি। এটার মান এবং দিক উভয়ই আছে। সমীকরণের ডানপক্ষেও ভেক্টর আছে, এই v^ \hat{v} চিহ্ন দিয়ে বোঝানো হয়েছে, যা হল বেগের একক ভেক্টর।
  • যখন একটির পর আরেকটি চিহ্ন বসানো হয়, তখন বোঝানো হয় তারা গুণ অবস্থায় আছে। উপরিউক্ত সূত্রের চারটি মান আছে: -1, , N N এবং v^ \hat{v} । আমরা গুণ করে সূত্রটি এভাবে লিখতে চাই:

ঘর্ষণ (Friction)

পদ্ধতিগুলো অনুসরণ করে ঘর্ষণ বল নিয়ে কাজ শুরু করা যাক।
ঘর্ষণ হল একটি ক্ষয়িষ্ণু বল। একটি ক্ষয়িষ্ণু বল হল এমন একটি বল যা কোন বস্তুর গতির কারণে হ্রাস পায়। ধরি, আমরা গাড়ি চালাচ্ছি। যখন আমরা ব্রেকে পা রাখি, ঘর্ষণ বল কাজে লাগিয়ে গাড়ির ব্রেক চাকার গতি কমায়। চল ঘর্ষণ (kintetic energy) (বা গতীয় ঘর্ষণ) তাপ শক্তিতে (thermal energy) রুপান্তরিত হয় (তাপ)। যখন দুইটি তল পরস্পর সংস্পর্শে আসে, তারা ঘর্ষণ অনুভব করে। ঘর্ষণ বলের একটি পরিপূর্ণ কাঠামোর মধ্যে স্থিতি ঘর্ষণ (কোন তলে একটি বস্তু স্থির হয়ে থাকে) এবং চল ঘর্ষণ (কোন তলে একটি বস্তু গতিশীল থাকে) উভয়ই থাকে, কিন্তু আমাদের কাজের জন্য, আমরা শুধুমাত্র চল ঘর্ষণ দেখবো।
এইখানে চিত্রসহ ঘর্ষণের সূত্র দেওয়া হল: 
এখন আমাদের দায়িত্ব হল ঘর্ষণের মান ও দিক উভয় বের করা। উপরের চিত্র অনুযায়ী, আমরা দেখতে পাই যে ঘর্ষণ বেগের বিপরীত দিকে কাজ করে। আসলে, সূত্রের এই অংশটি হল 1v^ -1 * \hat{v} , অথবা -1 গুণ বেগের একক ভেক্টর। ProcessingJS এ এটা করার মানে হল, বেগের ভেক্টর (velocity vector) নেয়া, নরমালাইজ (normalize) করা এবং -1 দ্বারা গুণ করা।
var friction = velocity.get();
friction.normalize();
// Let’s figure out the direction of the friction force 
// (a unit vector in the opposite direction of velocity)
friction.mult(-1);
এখানে দুইটি অতিরিক্ত ধাপ দেওয়া হল। প্রথমত, বেগের ভেক্টর (velocity vector) কপি করা অত্যন্ত গুরুত্বপূর্ণ, কারণ আমরা ভুলবশত বস্তুর দিক পরিবর্তন করতে চাই না। দ্বিতীয়ত, ভেক্টরকে নরমালাইজ (normalize) করতে হবে। এটার কারণ হল, ঘর্ষণ বলের মান গতির দ্রুততার সাথে জড়িত নয় এবং এমন 1 মান বিশিষ্ট ঘর্ষণ বল নিয়ে শুরু করতে চাই যা সহজে পরিমাপ করা যায়।
সূত্রানুযায়ী, মান হল μN \mu * N । এখানে μ, গ্রীক অক্ষর মিউ (উচ্চারণ “মিউ”),ঘর্ষণ গুণাঙ্ক এর জন্য ব্যবহৃত। ঘর্ষণ গুণাঙ্ক একটি নির্দিষ্ট তলে কোন ঘর্ষণ বলের শক্তি নির্ধারণ করে। এটার মান যত বেশি, ঘর্ষণ বলও তত বেশি; পক্ষান্তরে, ঘর্ষণ গুণাঙ্ক কম হলে ঘর্ষণ বল দুর্বল হয়। উদাহরণস্বরূপ, এক খণ্ড বরফের ঘর্ষণ গুণাঙ্ক, একটি, সিরিশ কাগজের ঘর্ষণ গুণাঙ্ক থেকে অনেক কম। যেহেতু ProcessingJS নিয়ে কাজ করা হচ্ছে, তাই আমরা ঘর্ষণ গুণাঙ্কের আনুমানিক মানের উপর ভিত্তি করে যে কোন শক্তির ঘর্ষণ বল তৈরি করতে পারি।
var c = 0.01;
Now for the second part: N. That N refers to the normal force, the contact force that's exerted by objects touching each other. More specifically, it's the perpendicular component of that contact force.
Think of a vehicle driving along a road. The vehicle pushes down against the road, and Newton’s third law tells us that the road in turn pushes back against the vehicle. That’s the normal force. For a simple case of an object moving horizontally, the normal force is equal to mass multiplied by the gravitational force, Fn=mgF_n = mg. That means a lightweight sports car would exert a smaller normal force, and thus experience less friction than a massive tractor trailer truck.
In the sledding diagram above, the object is moving along a surface at an angle, so computing the normal force is a bit more complicated because it doesn’t point in the same direction as gravity. For that, we’d need to know something about angles and trigonometry.
For now, our goal will be a "good enough" simulation for our ProcessingJS programs, not a perfect simulation. For example, we can make friction work with the assumption that the normal force will always have a magnitude of 1. Our N is then simply:
var normal = 1;
When we get into trigonometry in the next section, we’ll revisit these details and and make our friction example a bit more sophisticated.
এখন আমাদের কাছে ঘর্ষণের জন্য মান ও দিক উভয়ই আছে, এজন্য আমরা কোড করতে পারি…
var c = 0.01;
var normal = 1;
var frictionMag = c * normal;
var friction = movers[i].velocity.get();
friction.mult(-1);
friction.normalize();
friction.mult(frictionMag);
…এবং এই কোড আমাদের “বল” এর উদাহরণে যোগ করতে পারি, যেখানের বস্তুগুলো বায়ু, মহাকর্ষ বল অনুভব করতো এবং এখন ঘর্ষণ বল অনুভব করবে:
যদি প্রোগ্রামটিকে কিছুক্ষন চলমান রাখা হয়, দেখা যাবে যে বৃত্তগুলো ধীরে ধীরে নড়ছে এবং একটি জায়গায় গিয়ে থাকছে। যেহেতু ঘর্ষণ বল সর্বসময় বেগের বিপরীতে কাজ করে, একারণে বস্তুগুলো ধীর হয়ে যায়। এজন্য ঘর্ষণকে প্রয়োজনীয় উপদ্রব বলা হয়, এটা সম্পূর্ণ কার্যক্রমের উপর নির্ভরশীল।

এই "প্রাকৃতিক সিমুলেশন" কোর্সটি নেওয়া হয়েছে Daniel Shiffman (ড্যানিয়েল শিফম্যান) এর লেখা "The Nature of Code" (কোডের প্রকৃতি) থেকে এবং এটি ক্রিয়েটিভ কমন্সের এট্রিবিউশন-নন কমার্শিয়াল 3.0 আনপোরটেড লাইসেন্সের অধিনস্ত।
লোড করা হচ্ছে