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

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

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

কৌণিক বেগ

নিচের সূত্রগুলো কি মনে আছে?
location (অবস্থান) = location + velocity (বেগ)
velocity = velocity + acceleration (ত্বরণ)
গত দুইটি অনুশীলনীতে আমরা এই সূত্রগুলো সম্পর্কে জেনেছি, তাই না? আসলে, কোন বস্তুকে ঘুরানোর জন্যও আমরা একই সূত্র ব্যবহার করতে পারি।
angle (কোণ) = angle + angular velocity (কৌণিক বেগ)
angular velocity = angular velocity + angular acceleration (কৌণিক ত্বরণ)
মূলত, উপরের সূত্রটি আগের সূত্র থেকে অনেক সহজ কারণ, কোণ হল একটি স্কেলার রাশি—এটি একটি সংখ্যা, কিন্তু ভেক্টর নয়!
ধরি, পূর্বের চ্যালেঞ্জের উত্তর ব্যবহার করে ProcessingJS এ আমরা একটি লাঠি ঘুরাতে চাই। তাহলে কোডটি এমন হবে:
translate(width/2, height/2);
rotate(angle);
line(-50, 0, 50, 0);
ellipse(50, 0, 8, 8);
ellipse(-50, 0, 8, 8);
তারপর গতির সূত্রগুলো যোগ করলে, নিচের প্রোগ্রামটি তৈরি হয়। প্রথমে স্থির লাঠি নিয়ে প্রোগ্রামটি চালু হয় এবং ধীরে ধীরে লাঠিটি ঘুরতে শুরু করে ক্রমান্বয়ে এটির ঘূর্ণন বেগ দ্রুত বৃদ্ধি পায়:
এই কোড Mover অবজেক্টে প্রয়োগ করা যেতে পারে। উদাহরণস্বরূপ, আমরা কৌণিক বেগের বৈশিষ্ট্যগুলো Mover এর কন্সট্রাক্টরে যোগ করতে পারি।
var Mover = function(m, x, y) {
    this.position = new PVector(x, y);
    this.mass = m;

    this.angle = 0;
    this.aVelocity = 0;
    this.aAcceleration = 0;

    this.velocity = new PVector(random(-1, 1), random(-1, 1));
    this.acceleration = new PVector(0, 0);
};
তারপর update() এ, একই অ্যালগোরিদম ব্যবহার করে অবস্থান (position) এবং কোণ (angle) আপডেট করা হয়!
Mover.prototype.update = function () {

    this.velocity.add(this.acceleration);
    this.position.add(this.velocity);

    this.aVelocity += this.aAcceleration;
    this.angle += this.aVelocity;

    this.acceleration.mult(0);
};
এটার ফলাফল পাওয়ার জন্য, অবজেক্টকে প্রদর্শনের সময় ঘুরাতে হবে।
Mover.prototype.display = function () {
    stroke(0, 0, 0);
    fill(175, 175, 175, 200);
    rectMode(CENTER);

    // pushMatrix এবং popMatrix প্রয়োজনীয় যেন এটার আকৃতি
    // বাকি পরিবেশের উপর প্রভাব না ফেলে
    pushMatrix();
    // আকৃতির অবস্থানে উৎস (origin) নিয়োগ করা
    translate(this.location.x, this.location.y);
    // কোণ সাপেক্ষে ঘুরানো
    rotate(this.angle);
    rect(0, 0, this.mass*16, this.mass*16);
    popMatrix();
};
এখন উপরের কোডটি চালালে, নতুন কিছুই হবে না। এর কারণ হল কৌণিক ত্বরণ (this.aAcceleration = 0;) শূন্য হয়ে আছে। অবজেক্টকে ঘুরানোর জন্য ত্বরণের প্রয়োজন! অবশ্যই, আমরা কোডে একটি সংখ্যা বসিয়ে দিতে পারি:
this.aAcceleration = 0.01;
কেন্দ্রীয় আকর্ষণ বল সহ উপরের লজিকে প্রোগ্রামটি এমন হবে:
শুরুটা ভালো হয়েছে, কিন্তু এটাকে আরও মজাদার করার জন্য আমরা পারিপার্শ্বিক বলের সাপেক্ষে স্বয়ংক্রিয় কৌণিক ত্বরণ তৈরি করতে পারি - যেহেতু অবজেক্ট নিজের ইচ্ছামত ঘোরে না! এখন, গভীরভাবে পর্যালোচনা করে ত্বরণের দুইটি ধারণা টর্ক এবং জড়তা থেকে আমরা কৌণিক ত্বরণ আরও নিখুঁতভাবে তৈরি করতে পারি। কিন্তু এই কোর্সে এমন সিমুলেশন তৈরি করা সম্ভব নয় - যদিও সামনে আমাদের কিছু জটিল বিষয় দেখতে হবে।
এখনকার জন্য, একটি দ্রুত সমাধানই যথেষ্ট। আমরা কোন অবজেক্টের কৌণিক ত্বরণকে একটি ফাংশন হিসেবে বের করার পরে অবজেক্টটির ত্বরণের ভেক্টর পেতে পারি। এরূপ একটি উদাহরণ হল:
this.aAcceleration = this.acceleration.x;
সঠিক, এটা পুরোটাই যুক্তি বহির্ভূত। কিন্তু এটা দ্বারাও কাজ হয়। যদি অবজেক্টটির ত্বরণ ডানদিকে হয়, এটির কৌণিক ঘূর্ণন ঘড়ির কাটার দিকে (clockwise) হবে; আর বামদিকে হলে ঘূর্ণন হবে ঘড়ির কাটার বিপরীত দিকে (counterclockwise)। অবশ্যই, এই ক্ষেত্রে পরিমাপের দিকে খেয়াল রাখতে হবে। ত্বরণ ভেক্টরের x মানটি অনেক বড় হওয়ার জন্য অবজেক্টটি অস্বাভাবিকভাবে ঘুরতে পারে। তাই x এর মানকে কোন মান দিয়ে ভাগ করলে অথবা এটার মানকে কোনভাবে সীমাবদ্ধ রাখলে খুবই ভালো হবে। পরিবর্তনের পর এখানে সম্পূর্ণ update() মেথড দেওয়া হল।
Mover.prototype.update = function () {
    this.velocity.add(this.acceleration);
    this.position.add(this.velocity);

    // অনুভূমিক ত্বরণের উপর ভিত্তি করে কৌণিক ত্বরণ হিসাব করা,
    // এবং ত্বরণ প্রবল না হওয়ার জন্য ভাগ করা
    this.aAcceleration = this.acceleration.x / 10.0;
    this.aVelocity += this.aAcceleration;

    // constrain ব্যবহার করে বেগ নিয়ন্ত্রণ করা
    this.aVelocity = constrain(this.aVelocity, -0.1, 0.1);
    this.angle += this.aVelocity;

    this.acceleration.mult(0);
};
পরিবর্তনের পর আমাদের প্রোগ্রামটি নিম্নরূপ হয়:

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

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

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