29/09/2012 - 23:20
আমি এখানে একটি গিট রেপো তৈরি করেছি:
https://github.com/ArthurWulfWhite/Bezier- দূরত্ব /
সেখান থেকে জিপ হিসাবে উত্স ফাইলগুলি ডাউনলোড করতে আপনাকে স্বাগতম। এটিতে একটি ডেমো অন্তর্ভুক্ত রয়েছে যা আপনি ফ্ল্যাশডিভলফ ব্যবহার করে সংকলন করতে পারেন। ডেমোটি ব্যবহার করতে, ফ্ল্যাশ বিকাশে প্রকল্পটি খুলুন এবং 'টেস্ট প্রকল্প' ক্লিক করুন। ডেমোটি চালানোর সময়, একটি নতুন বেজিয়ার বক্ররেখা এবং একটি নতুন বৃত্তটি এলোমেলো করতে এলএমবিতে ক্লিক করুন।
শুভকামনা!
জিপ লিঙ্কটি দেখতে পাওয়া শক্ত - কেবল Ctrl + F ব্যবহার করুন এবং জিপটি টাইপ করুন। এই উত্সটি কয়েক সপ্তাহ পুনরায় অনুসন্ধান এবং প্রোগ্রামিং উপস্থাপন করে, আমি আশা করি আপনি এটি উপভোগ করেছেন।
আপনি যদি বেজিয়ারকে পুনরাবৃত্তভাবে বিভাগগুলিতে বিভক্ত করার এবং সেগুলির সাথে সংঘর্ষের জন্য অনুসন্ধান করার পরিকল্পনা করেন তবে আমি 100,100 অ্যারে (গ্রিড) তৈরি করার এবং প্রতিটি বিভাগকে নিকটস্থ চারটি স্কোয়ারে রাখার পরামর্শ দিচ্ছি, সুতরাং আপনাকে কেবল 4 / 10,000 এর সাথে সংঘর্ষের জন্য পরীক্ষা করতে হবে প্রতিটি ফ্রেম অংশ।
আমি মনে করি আপনি প্রোগ্রাম 2 এবং গেম স্রষ্টা হিসাবে উভয়ই বক্স 2 ডি থেকে উপকৃত হবেন, যেহেতু 'সরল' পদার্থবিজ্ঞানের ইঞ্জিন তৈরির ক্ষেত্রে অনেকগুলি লুকানো বাধা রয়েছে যা গতিটিকে কিছুটা গন্ডগোলযুক্ত এবং কম তরল বলে মনে হয় তবে তা হতে পারে।
পুরানো উত্তর: খাঁটি উপায়।
বৃত্তের কেন্দ্র এবং বক্ররেখার নিকটতম বিন্দুর মধ্যবর্তী দূরত্বের মধ্য দিয়ে দূরত্ব পরীক্ষা করে আপনি দেখতে পারেন যে কোনও বৃত্তটি বেজিয়ার বক্রের সাথে সংঘর্ষ করছে কিনা actually
দূরত্বের সমীকরণ (সাধারণভাবে)
ব্যাখ্যা:
বেজিয়ার সমীকরণ:
q(t) = (1-t) * ((1-t) * start.(x,y) + t * control.(x,y)) + t*(t * control.(x,y) + (1 - t) * end.(x,y))
এটি (কিছুটা বীজগণিত সহ) পর্যন্ত সংক্ষিপ্ত করা যায় - আমি বাদ পড়ব x (x, y) পঠনযোগ্যতার জন্য (তারা এখনও পয়েন্ট, এক নম্বর নয়)
q(t) = (start -2 * cont + end) t^2 + (-2 * start + 2 * control) + start
বিন্দু (x, y) থেকে দূরত্ব হ'ল:
sqrt ((q(t).x - point.x)^2 + (q(t).y - point.y)^2)
বলের বেজিয়ারের নিকটতম বিন্দুটি সন্ধান করার জন্য, আপনাকে যে সমস্ত পয়েন্টগুলি ডেরিভেটিভ শূন্যের (শিকড়) সমান হয় তার সন্ধান করতে হবে এবং খুঁজে পেতে হবে। এটি তৃতীয় ডিগ্রীর একটি বহুবচন যা আপনি একটি বদ্ধ সূত্র ব্যবহার করতে পারেন তবে এটি নির্ভরযোগ্য হতে পারে না কারণ কম্পিউটার ভাসমান পয়েন্ট প্রতিনিধিত্বমূলক ভগ্নাংশের যথার্থতা যথেষ্ট নাও হতে পারে। নিউটন বা সেই প্রকৃতির কিছু ব্যবহার করা আরও অনেক ভাল।
এর জন্য মূলগুলি খুঁজে বের করার জন্য আপনার যে ডেরাইভেটিভ দরকার তা হ'ল:
ধরে নেওয়া হচ্ছে: a = start b = control c = end d = cirlce Center point
জটিল অংশটি এই পয়েন্টগুলিকে গুণ করছে, আপনাকে ডট পণ্য ব্যবহার করতে হবে।
আপনি যদি চান তবে আমার কাছে এর কোড রয়েছে এবং আমি এখানে একটি ফাংশন আকারে এটি ভাগ করতে পারি যা যদি কোনও সংঘর্ষ হয় বা না হয় এবং সংঘর্ষের একটি কোণ থাকে তবে কেবল একটি বুলিয়ান দেয়। এই ধরণের সংঘর্ষের ইঞ্জিনের নিষ্পাপ বাস্তবায়নে কিছু সমস্যা দেখা দিতে পারে উদাহরণস্বরূপ একটি দ্রুত গতিশীল বল দুটি বক্ররেখার মাঝে ধরা পড়তে পারে।
আমি এটি আপাতত এড়িয়ে চলার পরামর্শ দিচ্ছি, কেবলমাত্র এক্স অক্ষের জন্য এবং y অক্ষের জন্য সহগফলগুলি যোগ করুন এবং সেগুলি যুক্ত করুন।
শিকড়গুলি খুঁজে পেতে আপনি নিউটনের মতো চয়ন করতে পারেন এমন কোনও নির্ভরযোগ্য পদ্ধতি ব্যবহার করুন, বেজিয়ারের মূল পয়েন্টগুলি থেকে দূরত্বটি পরীক্ষা করুন, বৃত্ত কেন্দ্রে 0 <= t <= 1 এবং বেজিয়ারের দুটি প্রান্তের দূরত্ব পরীক্ষা করুন (শুরু করুন এবং শেষ) বৃত্ত কেন্দ্রে, যে কোনও নিকটেই, কোনও সংঘর্ষ রয়েছে কিনা তা আপনাকে জানিয়ে দেবে।
ব্যাসার্ধ যদি সর্বনিম্ন দূরত্বের চেয়ে ছোট হয় তবে সংঘর্ষ হয়।
কোণটি বৃত্তের কেন্দ্র এবং বেজিয়ারের নিকটতম বিন্দুর মধ্যে প্রায় একটি।
বলা হচ্ছে, যদি আপনি সত্যিই সংঘর্ষের পদার্থবিজ্ঞানের সাথে একটি গেম তৈরি করতে চান তবে আমি আপনাকে বেজিয়ারের উপর দিয়ে পুনরাবৃত্তি করার পরামর্শ দিচ্ছি
q(t) = (1-t) * ((1-t) * start.(x,y) + t * control.(x,y)) + t*(t * control.(x,y) + (1 - t) * end.(x,y))
প্রতিটি টুকরোটি পর্যাপ্ত আকারে ছোট না হওয়া পর্যন্ত পুনরাবৃত্তভাবে মাঝখানে ভাগ করুন, 10 পিক্সেল বা তার চেয়ে কম বলুন, তারপর বাক্স থেকে মোটামুটি বেজিয়ার তৈরি করুন এবং পদার্থবিজ্ঞানের জন্য বক্স 2 ডি ব্যবহার করুন কারণ এটি সম্ভব যে এই সমস্ত সংঘর্ষ সনাক্তকরণ কোডটি লেখার পক্ষে দুর্দান্ত প্রমাণিত হবে সময় ডুবে যা গেমপ্লেকে বেশি বাড়ায় না। বাক্স 2 ডি ব্যবহার অতীতে অসংখ্য প্রকল্পে প্রমাণিত হয়েছে।