মূল বিষয়বস্তু
কম্পিউটার প্রোগ্রামিং
Course: কম্পিউটার প্রোগ্রামিং > Unit 5
Lesson 5: বল- নিউটনের গতিসূত্রসমূহ
- চ্যালেঞ্জ: ভাসমান বেলুন
- অনেকগুলো অবজেক্টের গতি
- চ্যালেঞ্জ: দেয়ালে বল
- মহাকর্ষ এবং ঘর্ষণ মডেল
- চ্যালেঞ্জ: গতিরোধকারী
- বায়ু এবং আবর্ত ঘর্ষণ
- চ্যালেঞ্জ: ডুবন্ত কাঠ
- মহাকর্ষীয় আকর্ষণ
- চ্যালেঞ্জ: নকশা উৎপাদক
- পারস্পরিক আকর্ষণ
- চ্যালেঞ্জ: পারস্পরিক বিকর্ষণ
- প্রকল্প: বাস্তুসংস্থান তৈরি
© 2023 Khan Academyব্যবহারের শর্তাদিগোপনীয়তার নীতিমালাকুকি নোটিশ
অনেকগুলো অবজেক্টের গতি
In the real world, the one we're seeking inspiration from here, we have more than one moving object - we're surrounded by many objects of varying mass and position. Let's look at how we can get our
Mover
to better simulate that aspect of the real world.এটা করার জন্য, অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং সম্পর্কে একটু পর্যালোচনা করা উচিত। যদিও, আমরা অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং সম্পর্কে বেশি কিছু দেখবো না। কিন্তু, এই কোর্সের সকল উদাহরণের মৌলিক বিষয়বস্তু অবজেক্ট (object-বস্তু) তৈরি করা নিয়ে, এজন্য একটি অবজেক্ট থেকে একাধিক অবজেক্ট নিয়ে কাজ করার পদ্ধতি পর্যালোচনা করা আবশ্যক।
লক্ষ্য করি, আমাদের
Mover
অবজেক্টটি দেখতে এমন। ভেক্টর পরিচিতির সময় আমরা যে Mover
অবজেক্ট তৈরি করেছিলাম এটা তার মতই, কিন্তু এর সাথে আরও দুইটি নতুন সংযোজন আছে—mass
(ভর) এবং একটি নতুন applyForce()
মেথড:এখন অবজেক্ট তৈরি করার জন্য, ধরি, অ্যারেতে, বিশটি
Mover
এর অস্তিত্ব তৈরি করে, লুপের সাহায্যে তাদের সংজ্ঞায়িত করতে হবে।var movers = [];
for (var i = 0; i < 20; i++) {
movers[i] = new Mover();
}
কিন্তু এখানে একটি ছোট সমস্যা রয়েছে। যদি আমরা
Mover
অবজেক্টের কন্সট্রাক্টরটি দেখি…var Mover = function() {
this.mass = 1;
this.position = new PVector(30, 30);
this.velocity = new PVector(0, 0);
this.acceleration = new PVector(0, 0);
};
…we discover that every
Mover
object is made exactly the same way. What we want are Mover
objects with varying mass that start at varying positions. Here is where we need to increase the sophistication of our constructor by adding arguments.var Mover = function(m, x, y) {
this.mass = m;
this.position = new PVector(x, y);
this.velocity = new PVector(0, 0);
this.acceleration = new PVector(0, 0);
};
Notice how the mass and position are no longer set to hardcoded numbers, but rather initialized via arguments passed through the constructor. This means we can create a variety of
Mover
objects: big ones, small ones, ones that start on the left side of the screen, ones that start on the right, etc.// উইন্ডোর বামদিকে একটি বড় Mover অবজেক্ট
var m1 = new Mover(10, 0, height/2);
// উইন্ডোর ডানদিকে একটি ছোট Mover অবজেক্ট
var m2 = new Mover(0.1, width, height/2);
অ্যারেতে, একটি লুপের মধ্যেই, সকল অবজেক্টের অস্তিত্ব তৈরি করা হয়।
for (var i = 0; i < 20; i++) {
movers[i] = new Mover(random(0.1, 5), 0, 0);
}
For each mover created, the mass is set to a random value between 0.1 and 5, the starting x-position is set to 0, and the starting y-position is set to 0. Certainly, there are all sorts of ways we might choose to initialize the objects; this is just a demonstration of one possibility.
অ্যারের অবজেক্টগুলোকে সংজ্ঞায়িত করে অস্তিত্ব তৈরি করাই হল কঠিন কাজ, বাকি কোড করা সহজ। প্রতিটি অবজেক্টে, বলের কোড যুক্ত করলেই শেষ এবং তারপর মজার দৃশ্য দেখা যাবে।
draw = function() {
background(50, 50, 50);
for (var i = 0; i < movers.length; i++) {
var wind = new PVector(0.01, 0);
var gravity = new PVector(0, 0.1);
movers[i].applyForce(wind);
movers[i].applyForce(gravity);
movers[i].update();
movers[i].display();
movers[i].checkEdges();
}
};
সবকিছু মিলিয়ে, প্রোগ্রামটি দেখতে এমন হয়। লক্ষ্য করি, প্রোগ্রামে দেখা যাবে, ছোট বৃত্তগুলো উইন্ডোর ডানদিকে বড় বৃত্তগুলো থেকে তাড়াতাড়ি পৌঁছে। এরূপ হবার মূল কারণ হল আমাদের এই সূত্রটি: ত্বরণ (acceleration) = বল (force) ভাগ ভর (mass)। ভর যত বড় হয়, ত্বরণ তত ক্ষুদ্র হয়।
এই "প্রাকৃতিক সিমুলেশন" কোর্সটি নেওয়া হয়েছে Daniel Shiffman (ড্যানিয়েল শিফম্যান) এর লেখা "The Nature of Code" (কোডের প্রকৃতি) থেকে এবং এটি ক্রিয়েটিভ কমন্সের এট্রিবিউশন-নন কমার্শিয়াল 3.0 আনপোরটেড লাইসেন্সের অধিনস্ত।
আলোচনায় অংশ নিতে চাও?
কোন আলাপচারিতা নেই।