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

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

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

দ্বিমাত্রিক নয়েজ

একক-মাত্রার নয়েজের ধারণা খুবই গুরুত্বপূর্ণ কারণ এটা আমাদের দ্বিমাত্রিক স্থানের দিকে নির্দেশ করে। এটা নিয়ে একটু চিন্তা করা যাক। একক- মাত্রার নয়েজের ক্ষেত্রে, অনেকগুলো মানের ক্রমবিন্যাস থাকে যেখানে একটি মান তার পার্শ্ববর্তী মানের সদৃশ। যেহেতু মান এক মাত্রায় আছে, এটার দুইটি পার্শ্ববর্তী (neighbour) মান আছে: একটি মান আগে আছে (ছকের বামদিকে) এবং আরেকটি মান পরে আছে (ডানদিকে)।
কোডের বৈশিষ্ট্যের ছবি
চিত্র I.10: একক-মাত্রার (1D) নয়েজ
তাত্ত্বিকভাবে দ্বিমাত্রিক নয়েজও একইভাবে কাজ করে। অবশ্য পার্থক্য হল মানগুলো সরলরেখায় নেই, কিন্তু ছকে রয়েছে। ধরি, একটি ছক কাগজের প্রতিটি ঘরে সংখ্যা রয়েছে। এখন যে কোন দিয়ে দেওয়া মান অবশ্যই এটার পার্শ্ববর্তী মানের সদৃশ হবে: উপরে, নিচে, ডানে, বামে এবং আড়াআড়িভাবে থাকা মানের সদৃশ হবে।
কোডের বৈশিষ্ট্যের ছবি
চিত্র I.11: দ্বিমাত্রিক (2D) নয়েজ
যদি এই ছকের প্রতিটি ঘরের মানকে একটি রঙের উজ্জ্বলতার উপর ভিত্তি করে কল্পনা করা হয়, তাহলে আমরা মেঘের মত একটি চিত্র পাবো। সাদা রঙ হালকা ধূসর রঙের পাশে থাকে, যা ধূসর রঙের পাশে থাকে, যা কালো ধূসর রঙের পাশে থাকে, যা কালো রঙের পাশে থাকে, যা কালো ধূসর রঙের পাশে থাকে, ইত্যাদি।
কোডের বৈশিষ্ট্যের ছবি
একারণেই নয়েজের উদ্ভাবন। একটু প্যারামিটার পরিবর্তন করে অথবা রঙ নিয়ে খেলে মার্বেল বা কাঠের অথবা অন্য কোন টেক্সচার (texture - কোন বস্তুর উপাদানের বাহ্যিক চিত্র) তৈরি করা যায়।
ProcessingJS এ দ্বিমাত্রিক নয়েজের ব্যবহার দেখা যাক। কোন উইন্ডোর প্রত্যেকটি পিক্সেল যে কোন রঙ করার জন্য, একটি নেস্টেড লুপ প্রয়োজন, যা দিয়ে প্রত্যেকটি পিক্সেলকে যে কোন উজ্জ্বলতায় রঙ করা যায়।
প্রত্যেকটি পিক্সেলকে noise() ফাংশন ব্যবহার করে রঙ করার জন্য, আমরা একই কাজ করব, শুধু random() কে কল করার পরিবর্তে noise() কে কল করব।
var bright = map(noise(x,y), 0, 1, 0, 255);
তাত্ত্বিকভাবে এটা একটি ভালো শুরু—এটা দ্বিমাত্রিক স্থানে প্রত্যেকটি (x,y) এর জন্য একটি নয়েজের মান দেয়। কিন্তু সমস্যা হল এটা দেখতে মেঘের মত হবে না। নয়েজের ক্ষেত্রে, 200 পিক্সেল থেকে 201 পিক্সেলে যাওয়া অনেক বড় একটি ব্যাপার। লক্ষ্য করি, একক-মাত্রার নয়েজ নিয়ে কাজ করার সময়, আমরা সময়ের চলককে প্রতি ফ্রেমে 0.01 করে বৃদ্ধি করি, 1 করে নয়! একটি ভালো সমাধান হল নয়েজের আর্গুমেন্টের জন্য বিভিন্ন চলক ব্যবহার করা। উদাহরণস্বরূপ, আমরা প্রতিবার অনুভূমিকভাবে নড়লে xoff নামের চলককে এবং উল্লম্বভাবে নড়লে yoff চলককে নেস্টেড লুপের মধ্যে বৃদ্ধি করতে পারি।
আমরা এই টিউটোরিয়ালে পারলিন নয়েজের (Perlin noise) অনেক ব্যবহারই দেখেছি। একক-মাত্রার নয়েজের ক্ষেত্রে, একটি অবজেক্টের অবস্থানের (location) মান নিযুক্ত করে অবজেক্টের ঘুরে বেড়ানো তৈরি করেছি। দ্বিমাত্রিক নয়েজের ক্ষেত্রে, পিক্সেলের মধ্যে মান দিয়ে মেঘ তৈরি করেছি। কিন্তু, খেয়াল রাখতে হবে, পারলিন নয়েজ হল শুধুমাত্র—মানগুলো। তারা পিক্সেলের সাথে বা রঙের সাথে জড়িত নয়। এই টিউটোরিয়ালের যে কোন চলককে পারলিন নয়েজ দিয়ে নিয়ন্ত্রণ করা যায়। আমরা যখন বায়ুর বল (wind force) মডেল করি, এটার শক্তি পারলিন নয়েজ দিয়ে নিয়ন্ত্রণ করা যায়। একইভাবে একটি ট্রির (tree) শাখা-প্রশাখার কৌণিক দূরত্ব অথবা একটি অবজেক্টের দ্রুতি এবং দিক পারলিন নয়েজের দিয়ে নিয়ন্ত্রণ করতে পারি, নিচের প্রোগ্রামের মত।
গত টিউটোরিয়ালে আমরা দৈব (random) সংখ্যার সমস্যাগুলো সম্পর্কে জেনেছি। অনেক সময়, কিছু সাধারণ ব্যাপারে অনেক প্রশ্ন করা হয়—কীভাবে অবজেক্ট গতিশীল হবে? কি রঙ ব্যবহার করবো? কিন্তু, অনেক সময়, এটার সহজ উত্তর দেওয়া কষ্টকর এবং সময়সাপেক্ষ মনে হতে পারে।
এই টিউটোরিয়ালটি শেষ করার আগে একটি কথা বলা আবশ্যক, অনেক সময় পারলিন নয়েজের ব্যবহার সমস্যার কারণ হয়ে দাড়াতে পারে। কীভাবে এই অবজেক্ট গতিশীল হবে? পারলিন নয়েজ! কি রঙ ব্যবহার করবো? পারলিন নয়েজ! এটার কত তাড়াতাড়ি বেড়ে ওঠা উচিত? পারলিন নয়েজ!
এটার মূল উদ্দেশ্য যে কোন মান বাছাইয়ের পদ্ধতি থেকে বিরত থাকা নয়। অর্থাৎ, বিষয়টি পারলিন নয়েজ ব্যবহার করা বা না করার উপর নির্ভরশীল নয়। মূল উদ্দেশ্য হল নিজের জ্ঞানের পরিসীমা বৃদ্ধি করা এবং যতই নতুন বিষয় সম্পর্কে শিখা যায়, ততই সেগুলো ব্যবহারের সুযোগ অনুধাবন করা সম্ভব হয়। এই টিউটোরিয়ালের লক্ষ্য হল নিজের জ্ঞান বাক্সকে বৃদ্ধি করা।  যদি একটি দৈব সংখ্যা চয়নের পদ্ধতি জানা থাকে, তাহলে নিজের সব কোডে শুধুমাত্র এক রকমের পদ্ধতিই ব্যবহার করা হবে।  পারলিন নয়েজ হল প্রোগ্রামে ব্যবহারযোগ্য দৈব সংখ্যা চয়নের আরেকটি পদ্ধতি।  পারলিন নয়েজ নিয়ে একটু অনুশীলন করে আমরা আরেকটি নতুন বিষয় শিখবো- ভেক্টর!

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