মূল বিষয়বস্তু
কম্পিউটার প্রোগ্রামিং
কোর্স: কম্পিউটার প্রোগ্রামিং > অধ্যায় 5
পাঠ 4: ভেক্টর- ভেক্টর সম্পর্কে প্রাথমিক ধারণা
- চ্যালেঞ্জ: ভেক্টর চলা
- ভেক্টর সম্পর্কিত গাণিতিক সমস্যা
- চ্যালেঞ্জ: লাইটসেবার
- ভেক্টর বিস্তার এবং নরমালাইজেশন
- চ্যালেঞ্জ: মান দৃষ্টিগোচর করা
- ভেক্টর গতি
- চ্যালেঞ্জ: ব্রেক করা গাড়ি
- স্ট্যাটিক ফাংশন বনাম উদাহরণস্বরূপ পদ্ধতি
- চ্যালেঞ্জ: স্ট্যাটিক (static) ফাংশন
- ইন্টার্যাক্টিভ ভেক্টর গতি
- চ্যালেঞ্জ: মাউস অনুসরণকারী
- প্রকল্প: কম্পিউটেশোনাল প্রাণি
© 2023 Khan Academyব্যবহারের শর্তাদিগোপনীয়তার নীতিমালাকুকি নোটিশ
ভেক্টর বিস্তার এবং নরমালাইজেশন
গুণ এবং ভাগ, আমরা যা দেখলাম, একটি উপায় যার মাধ্যমে দিকের কোন পরিবর্তন না করে ভেক্টরের দৈর্ঘ্য (length) মান পরিবর্তন হতে পারে। মনে হতে পারে: “একটি ভেক্টরের দৈর্ঘ্য আমরা কীভাবে জানবো? আমি উপাদানগুলো সম্পর্কে জানি (
x
এবং y
), কিন্তু আসলে তীরের মান (পিক্সেলে) কত?” একটি ভেক্টরের দৈর্ঘ্য (magnitude (মান) নামেও পরিচিত) বের করা খুবই উপকারি এবং গুরুত্বপূর্ণ।লক্ষ্য করি, উপরের চিত্রে কীভাবে একটি তীর (arrow) চিহ্ন এবং দুইটি উপাদান (
x
এবং y
) একটি সমকোণী ত্রিভুজ তৈরি করেছে। উপাদানগুলো হল দুইটি বাহু এবং তীরটি হল স্বয়ং অতিভুজ। আমরা খুবই ভাগ্যবান যে আমরা এই সমকোণী ত্রিভুজটি পেয়েছি, কারণ একটি সময়, পিথাগোরাস নামের একজন গ্রীক গণিতবিদ সমকোণী ত্রিভুজের দুই বাহুর সাথে অতিভুজের সম্পর্কের একটি সুন্দর সূত্র তৈরি করেছেন।পিথাগোরিয়ান উপপাদ্য হল এর বর্গ যোগ এর বর্গ সমান হল এর বর্গ।
এই সূত্রের মাধ্যমে, আমরা এর মান নির্ণয় করতে পারি:
PVector
অবজেক্ট বাস্তবায়নের জন্য কোড হবে:PVector.prototype.mag = function() {
return sqrt(this.x*this.x + this.y*this.y);
};
নিচের উদাহরণে একটি ভেক্টরের মান দেখা যাবে:
ভেক্টরের মান নির্ণয় করা হল মাত্র শুরু করা। মানের ফাংশন অনেক সম্ভাবনার দরজা খুলে দেয়, যার প্রথমটি হল normalization (নরমালাইজেশন)। নরমালাইজেশন হল একটি প্রক্রিয়া যার মাধ্যমে কোন কিছুকে “আদর্শ” অর্থাৎ “স্বাভাবিক” করা হয়। ভেক্টরের ক্ষেত্রে, ধরি, একটি আদর্শ ভেক্টরের দৈর্ঘ্য হল 1। একটি ভেক্টরকে নরমালাইজ করার জন্য, যে কোন একটি দৈর্ঘ্যের ভেক্টরের নিয়ে এটাকে একই দিকে নির্দেশিত করে রাখতে হবে, এর দৈর্ঘ্য (length) 1 করতে হবে এবং এটাকে একক ভেক্টরে এ রুপান্তরিত করতে হবে।
যেহেতু এটা ভেক্টরের দৈর্ঘ্য বাদ দিয়ে দিক নির্দেশনার বর্ণনা করে, তাই একক ভেক্টর এখানে খুবই উপকারী। এর কার্যকারিতা আমরা পরবর্তী অনুশীলনীতে বল নিয়ে আলোচনার সময় দেখবো।
যে কোন প্রদত্ত ভেক্টরের জন্য, একক ভেক্টর ( রূপে লেখা হয়) নিচের মত হিসাব করা হয়:
অর্থাৎ, একটি ভেক্টরকে নরমালাইজ করার জন্য খুব সাধারণভাবে প্রতিটি উপাদানকে এর মান দিয়ে ভাগ করতে হয়। এটা সহজবোধ্য। ধরি, একটি ভেক্টরের দৈর্ঘ্য 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 আনপোরটেড লাইসেন্সের অধিনস্ত।
আলোচনায় অংশ নিতে চাও?
কোন আলাপচারিতা নেই।