আমি কিছু ভেক্টর যুক্তি নিয়ে কাজ করছি, তাই জিজ্ঞাসা করছি: আমি কি এই বৈষম্যকে সহজ করে প্রসেসরের সময় বাঁচাতে পারি:
distance(vector1, vector2) < distance(vector1, vector3)
আমি vector1উভয় ক্ষেত্রে যে পুনরাবৃত্তি দেখুন ।
আমি কিছু ভেক্টর যুক্তি নিয়ে কাজ করছি, তাই জিজ্ঞাসা করছি: আমি কি এই বৈষম্যকে সহজ করে প্রসেসরের সময় বাঁচাতে পারি:
distance(vector1, vector2) < distance(vector1, vector3)
আমি vector1উভয় ক্ষেত্রে যে পুনরাবৃত্তি দেখুন ।
উত্তর:
হ্যাঁ , আপনি এটি সহজ করতে পারেন। প্রথমে তাদের ভেক্টর বলা বন্ধ করুন। তারা পয়েন্ট হয়। আসুন তাদের কল করুন A, Bএবং C।
সুতরাং, আপনি এটি চান:
dist(A, B) < dist(A, C)
প্রতিস্থাপন দূরত্বের সঙ্গে দূরত্বের, ছক তারপর ডট পণ্যের সঙ্গে (সংজ্ঞা থেকে ইউক্লিডিয় দৈর্ঘ্য প্রতিস্থাপন করুন। ACসঙ্গে AB + BCএখন এইসব বাস্তব ভেক্টর হয়) (সম্প্রসারণ প্রক্রিয়া সহজ, ফ্যাক্টর।
dist(A, B)² < dist(A, C)²
dot(AB, AB) < dot(AC, AC)
dot(AB, AB) < dot(AB + BC, AB + BC)
dot(AB, AB) < dot(AB, AB) + dot(BC, BC) + 2 dot(AB, BC)
0 < dot(BC, BC) + 2 dot(AB, BC)
0 < dot(BC + 2 AB, BC)
তুমি এখানে:
dot(AB + AC, BC) > 0
আপনার ভেক্টর স্বরলিপি সহ:
dot(v2 - v1 + v3 - v1, v3 - v2) > 0
এটি আগের দুটি ডট পণ্যের পরিবর্তে কয়েকটি সংযোজন এবং একটি বিন্দুর পণ্য।
dist(A, B)²একই রকম হয় তবে dot(AB, AB)এটি ইউক্লিডিয়ান দৈর্ঘ্যের খুব সংজ্ঞা থেকে আসে ।
হ্যাঁ.আপনার distanceফাংশনটি একটি বর্গমূল ব্যবহার করে ধরে নেওয়া যায় , আপনি বর্গমূলটি মুছে ফেলাতে এটি সহজ করতে পারেন।
যখন কোনও দূরত্বের বৃহত্তর (বা আরও ছোট) সন্ধান করার চেষ্টা করা হয় x^2 > y^2তখনও এটি সত্য x > y।
তবে সমীকরণটি গাণিতিকভাবে সহজ করার আরও প্রচেষ্টা সম্ভবত অর্থহীন। মধ্যে দূরত্ব vector1এবং vector2মধ্যে দূরত্ব হিসাবে একই নয় vector1এবং vector3। যদিও সামের উত্তরটি দেখায় সমীকরণটি গাণিতিকভাবে সহজ করা যেতে পারে , তবে বর্তমানে এটি যে ফর্মটি রয়েছে তা সম্ভবত প্রসেসরের ব্যবহারের দৃষ্টিকোণ থেকে পাবেন as
কিছু গণিত সাহায্য করতে পারে।
আপনি যা করার চেষ্টা করছেন তা হ'ল:
<v1, v2> < <v1, v3> =>
sqrt((y2-y1)^2+(x2-x1)^2) < sqrt((y3-y1)^2+(x3-x1)^2) =>
y2^2 - 2*y2y1 + y1^2 + x2^2 - 2*x2x1 + x1^2 < y3^2 - 2*y3y1 + y1^2 + x3^2 - 2*x3x1 + x1^2
আপনি যা থেকে বার বার পরিবর্তনশীলগুলি মুছতে পারেন এবং কিছু অন্যান্যকে গোষ্ঠী করতে পারেন। আপনার যে অপারেশনটি পরীক্ষা করতে হবে তা হ'ল:
y3^2 - y2^2 - 2*y1(y3-y2) + x3^2 - x2^2 - 2*x1(x3-x2) > 0
আশা করি এটা সাহায্য করবে.
আসল প্রশ্নটি মনে হচ্ছে নিকটস্থ বস্তু নির্ধারণের জন্য গণনা কীভাবে হ্রাস করা যায়?
অপ্টিমাইজ এই প্রায়ই, গেমস মধ্যে সম্পন্ন করা হয়, যদিও সব optimisations সঙ্গে এটি প্রফাইল-নির্দেশিত হওয়া উচিত এবং, প্রায়ই, না প্রক্রিয়া সহজ জিনিস।
নিকটতম জিনিসটি নির্ধারণের জন্য অপ্রয়োজনীয় দূরত্ব গণনা এড়ানোর উপায় - বা একটি নির্দিষ্ট পরিসরের মধ্যে সমস্ত জিনিস - একটি স্থানিক সূচক যেমন অষ্ট্রি ব্যবহার করা ।
যদি কেবলমাত্র প্রচুর পরিমাণে অবজেক্ট থাকে তবে এটি প্রদান করে। মাত্র তিনটি বস্তুর জন্য, এটি পরিশোধের সম্ভাবনা নেই এবং অবশ্যই কোডটি সহজতর করে না ।
এটি দূরত্বের আউটপুট (v1, v2) কিসের উপর নির্ভর করে
যদি এটি কোনও ভেক্টরের উপর দশমিক (ভাসা বা দ্বিগুণ) হয় তবে সম্ভবত এটি দূরত্ব অনেক দ্রুত হবে
floatকোনও কিছুর সাথে কী সম্পর্ক আছে।