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

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

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

ভেক্টর বিস্তার এবং নরমালাইজেশন

গুণ এবং ভাগ, আমরা যা দেখলাম, একটি উপায় যার মাধ্যমে দিকের কোন পরিবর্তন না করে ভেক্টরের দৈর্ঘ্য (length) মান পরিবর্তন হতে পারে। মনে হতে পারে: “একটি ভেক্টরের দৈর্ঘ্য আমরা কীভাবে জানবো? আমি উপাদানগুলো সম্পর্কে জানি (x এবং y), কিন্তু আসলে তীরের মান (পিক্সেলে) কত?” একটি ভেক্টরের দৈর্ঘ্য (magnitude (মান) নামেও পরিচিত) বের করা খুবই উপকারি এবং গুরুত্বপূর্ণ।
চিত্র 1.10: একটি ভেক্টরের v  দৈর্ঘ্য অথবা “মান” প্রায়শই ||v||আকারে লেখা হয়ে থাকে 
লক্ষ্য করি, উপরের চিত্রে কীভাবে একটি তীর (arrow) চিহ্ন এবং দুইটি উপাদান (xএবং y) একটি সমকোণী ত্রিভুজ তৈরি করেছে। উপাদানগুলো হল দুইটি বাহু এবং তীরটি হল স্বয়ং অতিভুজ। আমরা খুবই ভাগ্যবান যে আমরা এই সমকোণী ত্রিভুজটি পেয়েছি, কারণ একটি সময়, পিথাগোরাস নামের একজন গ্রীক গণিতবিদ সমকোণী ত্রিভুজের দুই বাহুর সাথে অতিভুজের সম্পর্কের একটি সুন্দর সূত্র তৈরি করেছেন।
পিথাগোরিয়ান উপপাদ্য হল a এর বর্গ যোগ b এর বর্গ সমান হল c এর বর্গ।
এই সূত্রের মাধ্যমে, আমরা v এর মান নির্ণয় করতে পারি:
||v||=vxvx+vyvy
PVector অবজেক্ট বাস্তবায়নের জন্য কোড হবে:
PVector.prototype.mag = function() {
    return sqrt(this.x*this.x + this.y*this.y);
};
নিচের উদাহরণে একটি ভেক্টরের মান দেখা যাবে:
ভেক্টরের মান নির্ণয় করা হল মাত্র শুরু করা। মানের ফাংশন অনেক সম্ভাবনার দরজা খুলে দেয়, যার প্রথমটি হল normalization (নরমালাইজেশন)। নরমালাইজেশন হল একটি প্রক্রিয়া যার মাধ্যমে কোন কিছুকে “আদর্শ” অর্থাৎ “স্বাভাবিক” করা হয়। ভেক্টরের ক্ষেত্রে, ধরি, একটি আদর্শ ভেক্টরের দৈর্ঘ্য হল 1। একটি ভেক্টরকে নরমালাইজ করার জন্য, যে কোন একটি দৈর্ঘ্যের ভেক্টরের নিয়ে এটাকে একই দিকে নির্দেশিত করে রাখতে হবে, এর দৈর্ঘ্য (length) 1 করতে হবে এবং এটাকে একক ভেক্টরে এ রুপান্তরিত করতে হবে।
যেহেতু এটা ভেক্টরের দৈর্ঘ্য বাদ দিয়ে দিক নির্দেশনার বর্ণনা করে, তাই একক ভেক্টর এখানে খুবই উপকারী। এর কার্যকারিতা আমরা পরবর্তী অনুশীলনীতে বল নিয়ে আলোচনার সময় দেখবো।
যে কোন প্রদত্ত ভেক্টরের u জন্য, একক ভেক্টর (u^ রূপে লেখা হয়) নিচের মত হিসাব করা হয়:
u^=u||u||
অর্থাৎ, একটি ভেক্টরকে নরমালাইজ করার জন্য খুব সাধারণভাবে প্রতিটি উপাদানকে এর মান দিয়ে ভাগ করতে হয়। এটা সহজবোধ্য। ধরি, একটি ভেক্টরের দৈর্ঘ্য 5। 5 কে 5 দিয়ে ভাগ করলে হয় 1। আমাদের সমকোণী ত্রিভুজের দিকে তাকালে বোঝা যায় যে, আমাদের অতিভুজকে 5 দিয়ে ভাগ করে স্কেল (পরিমাপ কমিয়ে) করতে হবে। একই উপায়ে বাহুগুলোও ছোট হয়, 5 দিয়ে ভাগ করে।
PVector অবজেক্টে, নরমালাইজেশন ফাংশন নিচের মত লেখা যায়:
PVector.prototype.normalize = function() {
  var m = this.mag();
  this.div(m);
};
অবশ্যই, এখানে একটি সমস্যা আছে। যদি ভেক্টরের মান 0 হয় তাহলে কি হবে? আমরা 0 দিয়ে ভাগ করতে পারি না! ত্রুটি যাচাই লজিক (যুক্তি) এটা সমাধান করবে:
PVector.prototype.normalize = function() {
  var m = this.mag();
  if (m > 0) {
    this.div(m);
  }
};
এখানে একটি প্রোগ্রাম আছে যেখানে আমরা সবসময় এমন ভেক্টরকে নরমালাইজ করে থাকি যা কেন্দ্র হতে মাউসের অবস্থানকে উপস্থাপন করে (এবং তারপর এটাকে দেখার জন্য গুণ করি, কারণ 1 পিক্সেল অনেক ছোট!):

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

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

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