এই স্ট্যাক স্নিপেটে একটি চিত্র লোড করুন এবং এটির উপরে আপনার মাউসটি সরান। আপনার কর্সার পয়েন্ট থেকে শুরু করে হিউ কোণ অনুসরণকারী একটি কালো বক্ররেখা অঙ্কিত হবে:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><style>canvas{border:1px solid black;}</style>Load an image: <input type='file' onchange='load(this)'><br><br>Max length <input id='length' type='text' value='300'><br><br><div id='coords'></div><br><canvas id='c' width='100' height='100'>Your browser doesn't support the HTML5 canvas tag.</canvas><script>function load(t){if(t.files&&t.files[0]){var e=new FileReader;e.onload=setupImage,e.readAsDataURL(t.files[0])}}function setupImage(t){function e(t){t.attr("width",img.width),t.attr("height",img.height);var e=t[0].getContext("2d");return e.drawImage(img,0,0),e}img=$("<img>").attr("src",t.target.result)[0],ctx=e($("#c")),ctxRead=e($("<canvas>"))}function findPos(t){var e=0,a=0;if(t.offsetParent){do e+=t.offsetLeft,a+=t.offsetTop;while(t=t.offsetParent);return{x:e,y:a}}return void 0}$("#c").mousemove(function(t){function e(t,e){var a=ctxRead.getImageData(t,e,1,1).data,i=a[0]/255,r=a[1]/255,o=a[2]/255;return Math.atan2(Math.sqrt(3)*(r-o),2*i-r-o)}if("undefined"!=typeof img){var a=findPos(this),i=t.pageX-a.x,r=t.pageY-a.y;$("#coords").html("x = "+i.toString()+", y = "+r.toString());var o=parseInt($("#length").val());if(isNaN(o))return void alert("Bad max length!");for(var n=[i],f=[r],h=0;n[h]>=0&&n[h]<this.width&&f[h]>=0&&f[h]<this.height&&o>h;)n.push(n[h]+Math.cos(e(n[h],f[h]))),f.push(f[h]-Math.sin(e(n[h],f[h]))),h++;ctx.clearRect(0,0,this.width,this.height),ctx.drawImage(img,0,0);for(var h=0;h<n.length;h++)ctx.fillRect(Math.floor(n[h]),Math.floor(f[h]),1,1)}});</script>
আমি কেবল গুগল ক্রোমে এই স্নিপেট পরীক্ষা করেছি।
উদাহরণস্বরূপ, যখন কার্সারটি লালের উপরে থাকে, তখন বক্ররেখার 0 ° opeাল থাকে তবে এটি হলুদের ওপরে হলে এটিতে 60। .াল থাকে। বক্ররেখা নির্দিষ্ট দৈর্ঘ্যের জন্য অবিরত অব্যাহত থাকে, অবিচ্ছিন্নভাবে তার changingাল পরিবর্তন করে রঙের সাথে মেলে।
এই চিত্রটি লোড করুন এবং আপনি যখন কার্সারটি জুড়ে প্যান করেন, তখন কার্সারের চারপাশের লাইনটি পুরো ঘড়ির কাঁটার বিপরীতে ঘুরতে হবে:
এটি এবং এটি চেষ্টা করার জন্য অন্যান্য ঝরঝরে ছবি। (আপনাকে সেগুলি সংরক্ষণ করতে হবে এবং তারপরে এগুলি স্নিপেট দিয়ে লোড করতে হবে cross ক্রস-উত্স সীমাবদ্ধতার কারণে এগুলিকে সরাসরি সংযুক্ত করা যাবে না))
এখানে স্নিপেটের একটি নন-মিনিফাইড সংস্করণ:
চ্যালেঞ্জ
একটি প্রোগ্রাম লিখুন যা স্নিপেট কী করছে তা কেবল ইন্টারেক্টিভভাবে নয় Write একটি চিত্র এবং একটি (x, y) চিত্রের সীমানায় স্থানাঙ্ক এবং একটি সর্বাধিক বক্ররেখা নিন। যুক্ত বর্ণের বক্ররেখার সাথে একই চিত্রটি আউটপুট করুন যা হিউ কোণগুলি (x, y) থেকে শুরু করে এবং সর্বাধিক দৈর্ঘ্যে পৌঁছলে বা চিত্রের সীমানায় আঘাত হ্রাসের পরে শেষ হয়।
বিশেষত, (x, y) এ বক্ররেখা শুরু করুন এবং সেখানে হিউ কোণটি পরিমাপ করুন। একটি নতুন ইউনিট (এক পিক্সেলের প্রস্থ) সেই দিকে যান, উল্লেখ করে যে আপনার নতুন অবস্থানটি সম্ভবত কোনও পূর্ণসংখ্যা সমন্বয় নয় । কাছের পিক্সেল থেকে হিউ ব্যবহার করে আবার বক্ররেখার উপর অন্য বিন্দু চিহ্নিত করুন এবং আবার সরান (যেমন floor
বা কিছু ব্যবহার করে round
, আমি এটি সঠিকভাবে পরীক্ষা করব না)। বক্র সীমা ছাড়িয়ে না যাওয়া বা এটি সর্বোচ্চ দৈর্ঘ্য অতিক্রম না করা অবধি এভাবে চালিয়ে যান। সমাপ্তির জন্য, সমস্ত বক্ররেখার চিত্রকে একক কালো পিক্সেল হিসাবে চিহ্নিত করুন (আবার নিকটস্থ পিক্সেল ব্যবহার করুন) এবং এই নতুন চিত্রটিকে আউটপুট করুন।
"হিউ এঙ্গেল" কেবল হিউ :
hue = atan2(sqrt(3) * (G - B), 2 * R - G - B)
নোট করুন যে গ্রেস্কেল মানগুলির জন্য প্রযুক্তিগতভাবে হিউ নেই, এটি 0 দেয়, তবে এটি ঠিক।
(এই সূত্রটি ব্যবহার করে atan2
যা বেশিরভাগ অন্তর্নির্মিত গণিত লাইব্রেরিগুলিতে রয়েছে। আর, জি, বি 0 থেকে 1 অবধি 0 থেকে 255 টি নয়))
- আপনি যে কোনও সাধারণ লসলেস ইমেজ ফাইল ফর্ম্যাট পাশাপাশি কোনও চিত্র লাইব্রেরি ব্যবহার করতে পারেন।
- স্টিডিন বা কমান্ড লাইন থেকে ইনপুট নিন বা চিত্র ফাইলের নাম, x এবং y এবং সর্বাধিক দৈর্ঘ্যের জন্য যুক্তি সহ একটি ফাংশন লিখুন।
- সর্বাধিক দৈর্ঘ্য এবং x এবং y সর্বদা nonnegative পূর্ণসংখ্যা হয়। আপনি ধরে নিতে পারেন x এবং y এর মধ্যে রয়েছে।
- আপনার পছন্দের নামের সাথে আউটপুট চিত্রটি সংরক্ষণ করুন বা কেবল এটি প্রদর্শিত করুন।
- আপনার বাস্তবায়নের স্নিপেটের সাথে ঠিক মেলে না। কিছুটা পৃথক স্থানে কয়েকটি পিক্সেল কিছুটা আলাদা বৃত্তাকার / গণনার পদ্ধতির কারণে ভাল। (বিশৃঙ্খলাবদ্ধ ক্ষেত্রে এটিগুলি বক্ররেখার দিকে নিয়ে যেতে পারে যা শেষ পর্যন্ত মূলত আলাদা হয়, তবে যতক্ষণ তারা দৃশ্যত সঠিকভাবে দেখায়, ঠিক আছে))
স্কোরিং
বাইটস মধ্যে ক্ষুদ্রতম জমা জয়।