If you're seeing this message, it means we're having trouble loading external resources on our website.

তোমার যদি কোন ওয়েব ফিল্টার দেওয়া থাকে, তাহলে দয়া করে নিশ্চিত কর যে *.kastatic.org এবং *.kasandbox.org ডোমেইনগুলো উন্মুক্ত।

মূল বিষয়বস্তু

অনেকগুলো অবজেক্টের গতি

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 আনপোরটেড লাইসেন্সের অধিনস্ত।

আলোচনায় অংশ নিতে চাও?

কোন আলাপচারিতা নেই।
ইংরেজি জানো? খান একাডেমির ইংরেজি সাইটে আরো আলোচনা দেখতে এখানে ক্লিক কর।