মূল বিষয়বস্তু
কম্পিউটার প্রোগ্রামিং
কোর্স: কম্পিউটার প্রোগ্রামিং > অধ্যায় 5
পাঠ 5: বল- নিউটনের গতিসূত্রসমূহ
- চ্যালেঞ্জ: ভাসমান বেলুন
- অনেকগুলো অবজেক্টের গতি
- চ্যালেঞ্জ: দেয়ালে বল
- মহাকর্ষ এবং ঘর্ষণ মডেল
- চ্যালেঞ্জ: গতিরোধকারী
- বায়ু এবং আবর্ত ঘর্ষণ
- চ্যালেঞ্জ: ডুবন্ত কাঠ
- মহাকর্ষীয় আকর্ষণ
- চ্যালেঞ্জ: নকশা উৎপাদক
- পারস্পরিক আকর্ষণ
- চ্যালেঞ্জ: পারস্পরিক বিকর্ষণ
- প্রকল্প: বাস্তুসংস্থান তৈরি
© 2023 Khan Academyব্যবহারের শর্তাদিগোপনীয়তার নীতিমালাকুকি নোটিশ
নিউটনের গতিসূত্রসমূহ
In the final example of the last section, we saw how we could calculate a dynamic acceleration based on a vector pointing from a circle on the screen to the mouse position. The resulting motion resembled a magnetic attraction between circle and mouse, as if some force were pulling the circle in towards the mouse.
In this section, we will formalize our understanding of the concept of a force and its relationship to acceleration. Our goal, by the end of this, is to understand how to make multiple objects move around the screen and respond to a variety of environmental forces.
ব্যবহারিকভাবে বলের কোড শুরু করার পূর্বে, বলের ধারণাসংক্রান্ত বিষয়গুলো সম্পর্কে জানি। “ভেক্টর” এর মতই “বল” এরও বিভিন্ন অর্থ আছে। এটি শক্তির প্রবলতাকে নির্দেশ করে, যেমন “সে বলিষ্ঠভাবে পাথরটি রাখলো” অথবা “সে বলিষ্ঠভাবে কথাটি বলল।” আমরা সার আইজ্যাক নিউটনের গতির সূত্র থেকে বল এর সংজ্ঞা পাই:
বল হল একটি ভেক্টর রাশি যা ভর (mass) বিশিষ্ট কোন বস্তুর ত্বরণ সৃষ্টি করে।
সুখবর হল আমরা সংজ্ঞার প্রথম অংশটি বুঝি: বল হল একটি ভেক্টর রাশি। ভালো হয়েছে যে, আমরা একটি সম্পূর্ণ অনুশীলনে ভেক্টর সম্পর্কেই জেনেছি এবং
PVector
নিয়ে কাজ করা শিখেছি!এখন, বল বিষয়ক নিউটনের গতির সূত্রগুলো দেখি।
নিউটনের প্রথম সূত্র
নিউটনের প্রথম সূত্রটি হল:
স্থির বস্তু স্থিরই থাকবে এবং গতিশীল বস্তু গতিশীলই থাকবে।
কিন্তু, এখানে বলের একটি গুরুত্বপূর্ণ বিষয় বাদ পরেছে। আমরা সূত্রটিকে এভাবে লিখতে পারি:
বাহ্যিক কোন বল প্রয়োগ না করলে স্থির বস্তু স্থিরই থাকবে এবং গতিশীল বস্তু সুষম দ্রুতিতে সরল পথে অগ্রসর হবে।
নিউটনের গতির সূত্রের আগে, গতির প্রাচীন সূত্র—অ্যারিস্টেটলের সূত্র—দুই হাজার বছরের পুরনো ছিল। এই সূত্র মতে, কোন গতিশীল বস্তুর গতি বজায় রাখার জন্য বল আবশ্যক। যদি গতিশীল বস্তুকে টানা বা ঠেলা না হয়, তাহলে বস্তুর গতি হ্রাস পাবে অথবা থেমে যাবে। এটা কি সঠিক?
অবশ্যই এটা সঠিক নয়। বাহ্যিক বল অনুপস্থিত থাকলে, কোন গতিশীল বস্তুর গতিসঞ্চারের জন্য কোন প্রকার বলের প্রয়োজন হয় না। একটি বস্তুকে (যেমন একটি বল) আকাশে ছুঁড়ে মারলে, পৃথিবীর বায়ুমন্ডলের চাপের (একটি বল) কারণে বস্তুটির গতি ধীর হয়ে যায়। বাহ্যিক বল ব্যতিত একটি বস্তুর বেগ সর্বদা সমান থাকে অথবা বস্তুর উপর একাধিক বল ক্রিয়া করলে যদি লব্ধি বল শূন্য হয় তাহলেও এরূপ ঘটবে। যেমন: মোট বলের যোগফল শূন্য। এটাকে সাম্যাবস্থা (equilibrium) বলা হয়। যখন পড়ন্ত বলের (ball) উপর ক্রিয়াশীল বায়ুর চাপ এবং মহাকর্ষ বল (force) সমান হবে তখন এটি প্রান্তিক বেগে পৌঁছবে (যা ধ্রুবক থাকবে)।
ProcessingJS এর ক্ষেত্রে, আমরা নিউটনের প্রথম সূত্রকে নিচের মত করে লিখতে পারি:
একটি বস্তুর
PVector
এর বেগ সাম্যাবস্থায় ধ্রুব থাকবে।নিউটনের দ্বিতীয় সূত্র দেখার আগে (আমাদের কাজের জন্য সবচেয়ে গুরুত্বপূর্ণ সূত্র), আমরা নিউটনের তৃতীয় সূত্রটি দেখবো।
নিউটনের তৃতীয় সূত্র
নিউটনের তৃতীয় সূত্রটি হল:
প্রত্যেক ক্রিয়ারই সমান ও বিপরীত প্রতিক্রিয়া রয়েছে৷
এই সূত্রটি মনে দ্বিধা-দন্দের সূত্রপাত ঘটায়। প্রথম কারণ হল, এই সূত্রের উক্তি দিয়ে বোঝায় একটি বলের কারণ আরেকটি বল। এটা সঠিক যে, কাউকে ধাক্কা দিলে সেও অবশ্যই আমাকে ধাক্কা দেবে। কিন্তু নিউটনের তৃতীয় সূত্রে আমরা এইসব ক্রিয়া প্রতিক্রিয়ার কথা বলছি না।
ধরি, একটি দেয়ালকে ধাক্কা দেওয়া হল। দেয়ালটি তৎক্ষণাৎ সেই ধাক্কার প্রতিক্রিয়ায় ধাক্কা দেবে না। আসলে বলের কোন “উৎস” নেই। দেয়ালে দেওয়া ধাক্কাটির মধ্যেই ক্রিয়া এবং প্রতিক্রিয়া উভয় বল থাকবে, একে বলা হয় “ক্রিয়া/প্রতিক্রিয়া জোড়।”
এই সূত্রটির আরও সমৃদ্ধ রূপ হতে পারে:
কার্যকরী বল সবসময় জোড় সংখ্যক হয়। দুইটি বলের প্রবলতা একই, কিন্তু তারা পরস্পর বিপরীতমুখী।
এখন এখানেও কিছু দ্বিধার বিষয় আছে, এখন মনে হচ্ছে যে দুইটি বলই একে অপরকে বাতিল করে দিচ্ছে। আপাত দৃষ্টিতে এমনটি মনে হলেও আসলে বিষয়টি সেরকম নয়। লক্ষ্য করা উচিত, বল বিভিন্ন বস্তুতে ক্রিয়া করে। আর দুইটি বল সমান কিন্তু তার মানে এই নয় যে বল দিয়ে সৃষ্ট গতিও সমান (অথবা বস্তুর গতি স্থির হয়ে যাবে)।
একটি স্থির ট্রাককে ধাক্কা দেওয়ার চেষ্টা করলে দেখা যাবে যে, স্থির ট্রাকটি কখনই প্রতিক্রিয়ায় ধাক্কা দিয়ে আমাকে ফেলে দিচ্ছে না, যদিও ট্রাকটি আমার চেয়ে অনেক বেশি শক্তিশালী। কারণ এটার উপর আমার হাত দিয়ে দেওয়া ধাক্কার বল সমান এবং বিপরীতমুখী। বল প্রদানের ফলাফল অন্যান্য অনেক বিষয়ের উপর নির্ভর করে। যদি ট্রাকটি ছোট হত এবং কোন পিচ্ছিল রাস্তায় স্থির থাকত, তাহলে আমি সম্ভবত এটিকে কিছুটা গতিশীল করতে পারতাম। পক্ষান্তরে, যদি ট্রাকটি অনেক বড় হত এবং কর্দমাক্ত রাস্তায় স্থির থাকত, তাহলে এটিকে ধাক্কা দিলে (দৌড়ে এসে) আহত হবার সম্ভাবনা রয়েছে।
রোলার স্কেট পড়ে ট্রাকটিকে ধাক্কা দিলে কি হবে?
এবার ProcessingJS এর জন্য নিউটনের তৃতীয় সূত্রটি দেখা যাক:
আমরা যদি কোন বস্তুর
PVector
বল f ধরি, যা A থেকে B বস্তুর উপর ক্রিয়া করে, তাহলে অবশ্যই—PVector.mult(f,-1);
— বল লাগবে যা B থেকে A বস্তুর উপর প্রতিক্রিয়া করে।আমরা ProcessingJS প্রোগ্রামিং এ দেখবো যে, সবসময় উপরের সূত্রটিই মেনে চলতে হয় না। কিছু ক্ষেত্রে, যেমন দুইটি বস্তুর মহাকর্ষীয় আকর্ষণ বলের ক্ষেত্রে, সমান এবং বিপরীত বলের দরকার। অন্যথায়, যখন সাধারণত, “পরিবেশে বায়ু প্রবাহ দেখা যায়” আমরা কখনই বায়ুর বিপরীতে কোন বস্তুর প্রয়োগকৃত বল নিয়ে আলোচনা করব না। আসলে, মূল কারণ হল আমরা বায়ু নিয়ে কাজই করছি না! মনে রাখতে হবে যে, প্রাকৃতিক জগতের পদার্থ বিজ্ঞান নিয়ে কাজ করা হচ্ছে, একবারে নিখুঁতভাবে কোন কিছুর সিমুলেশন তৈরি করা হচ্ছে না।
নিউটনের দ্বিতীয় সূত্র
এখন আমরা ProcessingJS প্রোগ্রামার হিসেবে সবচেয়ে গুরুত্বপূর্ণ সূত্রে উপনীত হয়েছি।
সূত্রটি এমন:
বল (Force) সমান হল ভর (Mass) গুণ ত্বরণ (Acceleration)।
অথবা:
আমাদের জন্য কেন এটা গুরুত্বপূর্ণ? এটাকে আরেকভাবে লেখা যাক।
কোন বস্তুর ত্বরণ সেই বস্তুর উপর প্রয়োগকৃত বলের সমানুপাতিক এবং ভরের ব্যস্তানুপাতিক। অর্থাৎ যদি আমাকে ধাক্কা দেওয়া হয়, ধাক্কার প্রবলতা যত বেশি হবে, আমিও তত তাড়াতাড়ি গতিশীল হবো (ত্বরণ)। আকার যত বড় হবে, গতি তত ধীর হবে।
ওজন বনাম ভর
কোন বস্তুর পদার্থের পরিমাণকে ভর (mass) বলা হয় (কেজিতে মাপা হয়)।
ওজন (weight), এটাকে প্রায়ই ভুলবশত ভর বলা হয়, কিন্তু এটা মূলত কোন বস্তুর উপর মহাকর্ষ বল। আমরা নিউটনের দ্বিতীয় সুত্র থেকে পাই, ওজন হল ভর গুণ অভিকর্ষজ ত্বরণ (
w = m * g
)। নিউটন এককে ওজন পরিমাপ করা হয়।একক আয়তনের ভরকে ঘনত্ব বলা হয় (যেমন, গ্রাম প্রতি ঘন সেন্টিমিটার)।
একটি মজার বিষয় হল, পৃথিবীতে কোন বস্তুর ভর এক কেজি হলে, চাঁদেও তার ভর এক কেজিই হবে। কিন্তু চাঁদে এটার ওজন হবে ছয়ভাগের এক ভাগ।
এখন, ProcessingJS এর ক্ষেত্রে, ভর কি হবে? আমরা পিক্সেল নিয়ে কাজ করছি, তাই না? বোঝার সুবিধার জন্য, ধরি পিক্সেলের জগতে সকল বস্তুর ভর 1।
F/1 = F
। এবং একারণে:The acceleration of an object is equal to force. This is great news. After all, we saw in the Vectors section that acceleration was the key to controlling the movement of our objects on screen. Position is adjusted by velocity, and velocity by acceleration. Acceleration was where it all began. Now we learn that force is truly where it all begins.
Let's use what we've learnt to build on our
Mover
object, which currently has position, velocity, and acceleration. Now our goal is to be able to add forces to this object, perhaps saying:mover.applyForce(wind);
or:
mover.applyForce(gravity);
যেখানে বায়ু এবং মহাকর্ষ হল
PVector
। নিউটনের দ্বিতীয় সূত্রানুসারে আমরা এটাকে এভাবে কোড করতে পারি:Mover.prototype.applyForce = function(force) {
this.acceleration = force;
};
বল সঞ্চয়ন
এটা ভালোই দেখাচ্ছে। কারণ, নিউটনের দ্বিতীয় সূত্রের মূল কথা হল ত্বরণ = বল (ভর ব্যতিত)। যাই হোক, এখানে একটি বড় সমস্যা আছে। একটু লক্ষ্য করি, আমাদের লক্ষ্য হল: পর্দায় এমন একটি গতিশীল বস্তু তৈরি করা যা বায়ু এবং মহাকর্ষ বলের প্রতিক্রিয়া দেয়।
mover.applyForce(wind);
mover.applyForce(gravity);
mover.update();
mover.display();
এখন, একটু কম্পিউটারের মত চিন্তা করি। প্রথমত, আমরা wind (বায়ু নিয়ে)
applyForce()
কে কল করি। এ কারণে Mover
অবজেক্টের ত্বরণ (acceleration) এখন হল PVector
এর বায়ু (wind)। দ্বিতীয়ত, আমরা মহাকর্ষ (gravity) নিয়ে applyForce()
কে কল করি। এখন Mover অবজেক্টের ত্বরণকে PVector
এর মহাকর্ষ করে দেওয়া হয়েছে। পরিশেষে, আমরা update()
কে কল করি। আসলে update()
এ কি হয়? ত্বরণকে (acceleration) বেগে (velocity) যোগ করা হয়।velocity.add(acceleration);
আমাদের প্রোগ্রামে কোন ত্রুটি লক্ষ্য করা যায় না, কিন্তু এই যে! এখনে একটি বিশাল সমস্যা রয়েছে। ত্বরণকে (acceleration) বেগে (velocity) যোগ করলে ত্বরণের মান কত হয়? এটার মান মহাকর্ষ বলের সমান হয়। বায়ু বাদ পড়েছে! আমরা
applyForce()
কে একবারের বেশি কল করলে, এটা পূর্ববর্তী সকল কলকে বাদ দিয়ে কাজ করে। কীভাবে আমরা একাধিক বলকে নিয়ন্ত্রণ করবো?সত্যি কথা বলতে, আমরা নিউটনের দ্বিতীয় সূত্রের সরলরূপ নিয়ে কাজ করেছিলাম। এজন্যই এরূপ সমস্যা দেখা দিয়েছে। নিচে যথাযথ উপায় দেওয়া হল:
মোট বল সমান হল ভর গুণ ত্বরণ।
অথবা, ত্বরণ সমান হল সকল বলের যোগফল ভাগ ভর। এটা একেবারে সঠিক। কারণ আমরা, নিউটনে প্রথম সূত্রে দেখেছিলাম, সকল বলের যোগফল শূন্য হলে, একটি বস্তু সাম্যাবস্থায় উপনীত হয় (যেমন ত্বরণ থাকে না)। আমরা এই কাজটি একটি উপায়ে করি যার নাম হল বল সঞ্চয়ন। এটা আসলেই অনেক সহজ; শুধু বলগুলো যোগ করতে হয়। যে কোন সময়ে 1, 2, 6, 12 অথবা 303 টি বল থাকতে পারে। যতগুলো বলই ক্রিয়া করুক আমাদের অবজেক্টটি সঞ্চয়ন করতে পারলেই চলবে।
এখন
applyForce()
মেথডটিকে একটু পরিবর্তন করি, যেন প্রত্যেকটি নতুন বলকে ত্বরণে যোগ করে সঞ্চয়ন করা হয়:Mover.prototype.applyForce = function(force) {
this.acceleration.add(force);
};
Now, we’re not finished just yet. Force accumulation has one more piece. Since we’re adding all the forces together at any given moment, we have to make sure that we clear acceleration (i.e. set it to zero) before each time
update()
is called. Let’s think about wind for a moment. Sometimes the wind is very strong, sometimes it’s weak, and sometimes there’s no wind at all. At any given moment, there might be a huge gust of wind, say, when the user holds down the mouse:if (mouseIsPressed) {
var wind = new PVector(0.5, 0);
mover.applyForce(wind);
}
When the user releases the mouse, the wind will stop, and according to Newton’s first law, the object will continue to move at a constant velocity. However, if we had forgotten to reset acceleration to zero, the gust of wind would still be in effect. Even worse, it would add onto itself from the previous frame, since we are accumulating forces!
Acceleration, in our simulation, has no memory; it is simply calculated based on the environmental forces present at a moment in time. This is different than, say, position, which must remember where the object was in the previous frame in order to move properly to the next.
প্রতি ফ্রেমের জন্য ত্বরণকে শূন্য করার সবচেয়ে সহজ উপায় হল PVector কে update() এর শেষে 0 দিয়ে গুণ করা।
Mover.prototype.update = function() {
this.velocity.add(this.acceleration);
this.position.add(this.velocity);
this.acceleration.mult(0);
};
ভর
এখন ঠিক আছে। Mover class (ক্লাস) এ বলের কোড যোগ করার আগে আরেকটু কাজ বাকি আছে। নিউটনের দ্বিতীয় সূত্র হল , not । ভর যোগ করা অনেক সহজ, এটা আমাদের অবজেক্টে একটি বৈশিষ্ট্য যোগ করার মত, কিন্তু আমাদের কিছু বিষয় খেয়াল করতে হবে। নইলে পরে সমস্যা হতে পারে।
পরিমাপের একক
Now that we are introducing mass, it’s important to make a quick note about units of measurement. In the real world, things are measured in specific units. We say that two objects are 3 meters apart, the baseball is moving at a rate of 90 miles per hour, or this bowling ball has a mass of 6 kilograms. As we’ll see later in this course, sometimes we will want to take real-world units into consideration. However, in this section, we’re going to ignore them for the most part.
Our units of measurement here are in pixels (“These two circles are 100 pixels apart”) and frames of animation (“This circle is moving at a rate of 2 pixels per frame”). In the case of mass, there isn’t any unit of measurement for us to use. We’re just going to make up numbers. In this example, we’re arbitrarily picking the number 10. There is no unit of measurement, though you might enjoy inventing a unit of your own, like “1 moog” or “1 yurkle.”
For demonstration purposes, we’ll tie object mass to object size -- so if the object's mass is 10, we might draw a circle with radius 10. This makes it easy to visualize the mass of an object and understand the effect of mass in our programs. In the real world, however, size does not definitely indicate mass. A small metal ball could have a much higher mass than a large balloon due to its higher density.
Mass is a scalar (float), not a vector, as it’s just one number describing the amount of matter in an object. We could be fancy about things and compute the area of a shape as its mass, but it’s simpler to begin by saying, “Hey, the mass of this object is…um, I dunno…how about 10?”
var Mover = function() {
this.mass = 10;
this.position = new PVector(random(width), random(height));
this.velocity = new PVector(0, 0);
this.acceleration = new PVector(0, 0);
};
ভরকে এই মান দেওয়ার কারণ হল এই জটিল কোড আপাতত সহজ রাখা। পরবর্তীতে আমরা ভিন্ন ভরবিশিষ্ট বস্তু নিয়ে কাজ করবো। Mass (ভর) কোথায় হবে? অবজেক্টে নিউটনের দ্বিতীয় সূত্র প্রয়োগের সময় এটাকে ব্যবহার করবো।
Mover.prototype.applyForce = function(force) {
force.div(this.mass);
this.acceleration.add(force);
};
যদিও আমাদের কোড দেখে মনে হচ্ছে যে কাজ হয়ে গেছে, কিন্তু এখানে আরও একটি সমস্যা রয়েছে। ধরি, দুইটি
Mover
অবজেক্ট প্রবল বায়ুর (wind) চাপে নড়ছে।var m1 = new Mover();
var m2 = new Mover();
var wind = new PVector(1, 0);
m1.applyForce(wind);
m2.applyForce(wind);
Again, let’s be the computer.
m1.applyForce()
receives the wind force (1,0), divides it by mass (10), and adds it to acceleration.code | wind |
---|---|
var wind = new PVector(1, 0); | (1, 0) |
m1.applyForce(wind) | (0.1, 0) |
OK. Moving on to object
m2
. It also receives the wind force—(1,0). Wait. Hold on a second. What is the value of the wind force? Taking a closer look, the wind force is actually now (0.1,0)! Do you remember this little tidbit about working with objects?
In JavaScript, an variable that holds an object (like a
PVector
) is actually holding a pointer to that object in memory. When you pass the object to a function, you aren't passing a copy- you're passing the original pointer. So if a function makes a change to that object (like it does here by dividing by mass), then that object is permanently changed! That's why things go awry here. We don’t want
m2
to receive a force divided by the mass of object m1
. We want it to receive that force in its original state—(1,0). And so we must protect ourselves and make a copy of the PVector f
before dividing it by mass. Fortunately, the
PVector
object has a convenient method for making a copy—get()
. get()
returns a new PVector
object with the same data. And so we can revise applyForce()
as follows:Mover.prototype.applyForce = function(force) {
var f = force.get();
f.div(this.mass);
this.acceleration.add(f);
};
পক্ষান্তরে, আমরা পূর্ববর্তী অনুশীলনে যা শিখেছিলাম তা ব্যবহার করে, মেথডটিকে
div()
এর স্থির রূপ ব্যবহার করে পুনরায় লিখতে পারি।Mover.prototype.applyForce = function(force) {
var f = PVector.div(force, this.mass);
this.acceleration.add(f);
};
সবচেয়ে গুরুত্বপূর্ণ বিষয় হল আসল বলের ভেক্টরের কোন পরিবর্তন না করা, যাতে এটি একাধিক
মুভার
অবজেক্টের জন্য ব্যবহার করা যায়।বল তৈরি করা
আমরা জানি বল কি (একটি ভেক্টর রাশি) এবং আমরা আরও জানি যে, একটি অবজেক্টে কীভাবে বল প্রয়োগ করা যায় (ভর দিয়ে ভাগ করে ভাগফল অবজেক্টের ত্বরণের ভেক্টরে যোগ করতে হয়)। কিন্তু আমাদের কি বাদ পরেছে? আসলে, আমরা প্রথমত বল কীভাবে পাবো সেটি নির্দিষ্ট করিনি। বল কোথায় থেকে আসবে?
এই অংশে, আমরা ProcessingJS দিয়ে বল তৈরি করার দুইটি মেথড দেখবো:
- বল তৈরি করা! আমরাই প্রোগ্রামার, এজন্য এটি তৈরির গুরুদায়িত্ব আমাদেরই। অবশ্যই আমরা সহজেই বল তৈরি করে এটি প্রয়োগ করতে সক্ষম।
- বলের কাঠামো প্রদান! সত্যিই, এই জগতে বলের উপস্থিতি অনস্বীকার্য। পদার্থ বিজ্ঞান বইয়ে বলের জন্য কতিপয় সূত্র দেওয়া আছে। আমরা সেই সূত্রগুলো ব্যবহার করেই ProcessingJS এ বল তৈরি করতে পারি।
সবচেয়ে সহজ উপায় হল সংখ্যা নিয়ে বল তৈরি করা। বায়ুর বেগ নিয়ে শুরু করা যাক। ডানদিকে হালকাভাবে বয়ে যাওয়া বায়ুর (wind) ক্ষেত্রে কি হবে? ধরি, একটি
Mover
অবজেক্ট হল m
, তাহলে আমাদের কোডটি নিম্নরূপ হবে:var wind = new PVector(0.01, 0);
m.applyForce(wind);
ফলাফল আশানরুপ না হলেও, শুরুর জন্য এটাই যথেষ্ট। আমরা একটি
PVector
অবজেক্ট তৈরি করে, এটিকে সংজ্ঞায়িত করব এবং একটি অবজেক্টে পাঠিয়ে দেবো (যার নিজেস্ব ত্বরণ থাকবে)। দুইটি বলের জন্য, যেমন wind (বায়ু) এবং gravity (মহাকর্ষ) বল (যা নিচের দিকে জোড়ালোভাবে ক্রিয়া করে), কোড হবে নিম্নরূপ:var wind = new PVector(0.01, 0);
var gravity = new PVector(0, 0.1);
m.applyForce(wind);
m.applyForce(gravity);
এখন আমাদের দুইটি বল আছে, যা ভিন্ন মানে ভিন্ন দিকে ক্রিয়াশীল, উভয়কেই
m
অবজেক্টে প্রয়োগ করা হয়েছে। এবার আমরা কিছু একটি তৈরি করতে পেরেছি। এখন আমরা ProcessingJS এর অবজেক্টগুলোর জন্য একটি জগৎ তৈরি করতে পেরেছি, যার মধ্যে অবস্থান করে অবজেক্টগুলো কোন না কোন প্রতিক্রিয়া দিয়ে থাকে।সকল কোড একসাথে করার পর, আমাদের প্রোগ্রামটি নিম্নরূপ হয়:
খুব ভালো! আমরা এই অনুশীলনে অনেক কিছু শিখেছি এবং এখন আমরা অনেক কিছুই করতে সক্ষম। পরবর্তীতে আমরা - বলের ব্যবহার শিখবো!
এই "প্রাকৃতিক সিমুলেশন" কোর্সটি নেওয়া হয়েছে Daniel Shiffman (ড্যানিয়েল শিফম্যান) এর লেখা "The Nature of Code" (কোডের প্রকৃতি) থেকে এবং এটি ক্রিয়েটিভ কমন্সের এট্রিবিউশন-নন কমার্শিয়াল 3.0 আনপোরটেড লাইসেন্সের অধিনস্ত।
আলোচনায় অংশ নিতে চাও?
কোন আলাপচারিতা নেই।