আমি কি অসমতাটিকে "দূরত্ব (পি 1, পি 2) <দূরত্ব (পি 1, পি 3) সরল করতে পারি?"


14

আমি কিছু ভেক্টর যুক্তি নিয়ে কাজ করছি, তাই জিজ্ঞাসা করছি: আমি কি এই বৈষম্যকে সহজ করে প্রসেসরের সময় বাঁচাতে পারি:

distance(vector1, vector2) < distance(vector1, vector3)

আমি vector1উভয় ক্ষেত্রে যে পুনরাবৃত্তি দেখুন ।


10
কেবলমাত্র একটি দ্রষ্টব্য নোট: আপনার বর্তমান পদ্ধতিটি খুব পঠনযোগ্য এবং এর ক্রিয়াকলাপটি তাত্ক্ষণিকভাবে বোঝা যায়। এই উত্তরগুলির মধ্যে কয়েকটি আপনার অনুরোধকৃত কার্য সম্পাদন করতে পারে, তবে খুব কম স্পষ্ট। পারফরম্যান্সের সারমর্মটি থাকলে এটি ঠিক আছে তবে স্বচ্ছতার ক্ষতি হওয়ার জন্য অ্যাকাউন্টে এটি সঠিকভাবে মন্তব্য করতে ভুলবেন না।
মাইক এস

3
@ মাইকস এর মন্তব্য অব্যাহত রাখতে, পারফরম্যান্সটি কেবলমাত্র এর মতো ক্ষেত্রে যদি আপনি ইতিমধ্যে বিশ্লেষণ বা প্রোফাইলিং করে থাকেন এবং এই কলটিকে একটি বাধা হিসাবে চিহ্নিত করে থাকেন তবে কেবল পার্থক্য থাকতে হবে। আমরা যদি 305fps এবং 303fps এর মধ্যে পার্থক্যটি কথা বলি তবে রক্ষণাবেক্ষণযোগ্যতা কাঁচা পারফরম্যান্সকে হারাতে পারে।
ফোশি

উত্তর:


24

হ্যাঁ , আপনি এটি সহজ করতে পারেন। প্রথমে তাদের ভেক্টর বলা বন্ধ করুন। তারা পয়েন্ট হয়। আসুন তাদের কল করুন 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

এটি আগের দুটি ডট পণ্যের পরিবর্তে কয়েকটি সংযোজন এবং একটি বিন্দুর পণ্য।


আপনি কীভাবে বিন্দুর পণ্য সংস্করণ দিয়ে a + b b = a a + c c প্রতিস্থাপন করতে পারেন তা ব্যাখ্যা করতে পারেন ?
ট্র্যাভিসজি

2
@ ট্রাভিসজি আপনি কী জিজ্ঞাসা করছেন তা সম্পর্কে আমি নিশ্চিত নই। যদি আপনার প্রশ্নটি কেন dist(A, B)²একই রকম হয় তবে dot(AB, AB)এটি ইউক্লিডিয়ান দৈর্ঘ্যের খুব সংজ্ঞা থেকে আসে ।
সাম হোচেভার

2
স্পষ্টতই এটি (কিছুটা) গাণিতিকভাবে সমীকরণকে সহজতর করে, তবে অপের জন্য অপরিহার্যভাবে "প্রসেসরের সময় বাঁচাতে" হবে না। এটি কেবলমাত্র মূল দূরত্বের সমীকরণগুলি থেকে বর্গমূলকে সরিয়ে দেওয়ার চেয়ে আরও জটিলতা এবং আরও বেশি গণনার ফলাফল দেয়।
মাইকেলহাউস

1
আমি ভুল হলে আমাকে সংশোধন করুন তবে দুটি ডট-প্রোডাক্ট ডট-প্রোডাক্টের জন্য 5 টি অপারেশন এবং দুটি ভেক 3 সাবস্ট্রাকশন যা মোট 16 টি অপারেশন, আপনার পথে 3 টি ভিজ 3 সাবস্ট্রাকশন প্লাস যুক্ত রয়েছে যা 12 টি অপারেশন এবং ডট পণ্য তৈরি করে 17.
লুইস ডব্লিউ

2
আকর্ষণীয়ভাবে যথেষ্ট, ফলাফলটি একটি সমান্তরাল দুটি বিপরীত কর্ণের ডট-প্রোডাক্ট। তবে তা অপ্রাসঙ্গিক। আমি যা বলতে চেয়েছিলাম তা হল এই সম্পূর্ণ সরলীকরণ থেকে লাভ করার মতো বিশাল পরিমাণ নেই ; অন্যরা যেমন উল্লেখ করেছে যে আপনি আসলে যা গণনা করার চেষ্টা করছেন তা হ্রাস বা জটিল করার জন্য এটি একটি শালীন পরিমাণে কাজ করে। তবে আপনি অবশ্যই প্রথম পদক্ষেপটি ব্যবহার করতে চান। অপ্রয়োজনীয় বর্গমূলকে এড়ানো সর্বদা এটির পক্ষে উপযুক্ত। জটিল দূরত্বেও দূরত্বের স্কোয়ারগুলির তুলনা করা সমান, দূরত্ব ইতিবাচক হিসাবে সুনির্দিষ্ট।
ট্যাসএজেন্ট

16

হ্যাঁ.আপনার distanceফাংশনটি একটি বর্গমূল ব্যবহার করে ধরে নেওয়া যায় , আপনি বর্গমূলটি মুছে ফেলাতে এটি সহজ করতে পারেন।

যখন কোনও দূরত্বের বৃহত্তর (বা আরও ছোট) সন্ধান করার চেষ্টা করা হয় x^2 > y^2তখনও এটি সত্য x > y

তবে সমীকরণটি গাণিতিকভাবে সহজ করার আরও প্রচেষ্টা সম্ভবত অর্থহীন। মধ্যে দূরত্ব vector1এবং vector2মধ্যে দূরত্ব হিসাবে একই নয় vector1এবং vector3। যদিও সামের উত্তরটি দেখায় সমীকরণটি গাণিতিকভাবে সহজ করা যেতে পারে , তবে বর্তমানে এটি যে ফর্মটি রয়েছে তা সম্ভবত প্রসেসরের ব্যবহারের দৃষ্টিকোণ থেকে পাবেন as


আমার কাছে পর্যাপ্ত প্রতিনিধি নেই, তবে আমি এটি মৌলিকভাবে ভুল বলে বিশ্বাস করি, আমি বিশ্বাস করি: "আমি কি এই বৈষম্যকে সহজ করে প্রসেসরের সময় বাঁচাতে পারি?" উত্তরটি হল হ্যাঁ.
এত বিভ্রান্ত

উত্তরটি কেবল হ্যাঁ যদি দূরত্বের সমীকরণটি বর্গমূল ব্যবহার করে। যা আমি উল্লেখ করছি।
মাইকেলহাউস

বৈধ পয়েন্ট, আমি আমার বক্তব্য প্রত্যাহার করব। যাইহোক, এটি 99% গ্যারান্টিযুক্ত যে ব্যবহারকারীর অর্থ ইউক্যালিডিয়ান দূরত্ব স্কয়ারটি (যোগফল (মাত্রিক পার্থক্য বর্গক্ষেত্র))
এত বিভ্রান্ত

@ আইমসোকনফিউজড ফেয়ার যথেষ্ট, আমি আমার উত্তরের ক্রমটি পরিবর্তন করে প্রথমে সম্ভবত সবচেয়ে সম্ভাব্য (99%) পরিস্থিতি বর্ণনা করব।
মাইকেলহাউস

2
হ্যাঁ, আমার অভিজ্ঞতাটি হ'ল যখন আপনি এই ধরণের স্টাফগুলির সাথে ডিল্যান্সস্পয়ার্ড ফাংশনটি খুব দরকারী। এটি ঠিক যেমন পরিষ্কার এবং ব্যয়বহুল স্কয়ারটি অপারেশন এড়িয়ে চলে।
লরেন পেচটেল

0

কিছু গণিত সাহায্য করতে পারে।

আপনি যা করার চেষ্টা করছেন তা হ'ল:

<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

আশা করি এটা সাহায্য করবে.


-1

আসল প্রশ্নটি মনে হচ্ছে নিকটস্থ বস্তু নির্ধারণের জন্য গণনা কীভাবে হ্রাস করা যায়?

অপ্টিমাইজ এই প্রায়ই, গেমস মধ্যে সম্পন্ন করা হয়, যদিও সব optimisations সঙ্গে এটি প্রফাইল-নির্দেশিত হওয়া উচিত এবং, প্রায়ই, না প্রক্রিয়া সহজ জিনিস।

নিকটতম জিনিসটি নির্ধারণের জন্য অপ্রয়োজনীয় দূরত্ব গণনা এড়ানোর উপায় - বা একটি নির্দিষ্ট পরিসরের মধ্যে সমস্ত জিনিস - একটি স্থানিক সূচক যেমন অষ্ট্রি ব্যবহার করা

যদি কেবলমাত্র প্রচুর পরিমাণে অবজেক্ট থাকে তবে এটি প্রদান করে। মাত্র তিনটি বস্তুর জন্য, এটি পরিশোধের সম্ভাবনা নেই এবং অবশ্যই কোডটি সহজতর করে না ।


4
আমি মনে করি আসল প্রশ্নটি মোটামুটি সোজা, এবং এই উত্তরটি এর সমাধান করে না। আপনি যদি ওপির গভীর, অস্তিতর্কিত প্রশ্নগুলি সম্পর্কে অনুমান করতে চেয়েছিলেন তবে আপনি যদি আসলে জিজ্ঞাসিত প্রশ্নের উত্তর না দিয়ে থাকেন তবে মন্তব্য হিসাবে সত্যই হওয়া উচিত।

আমি এটিকে গুরুত্ব দিচ্ছি কারণ একটি সম্ভাব্য অকালীন অপটিমাইজেশন প্রার্থনা করা কোনও সমস্যার উত্তর নয় যেখানে স্পষ্টত অপ্টিমাইজেশনের দ্বারা পাঠযোগ্যতা, কোড বজায় রাখা বা তাত্পর্যপূর্ণ অনুশীলনকে উত্সাহ দেয় না। আপনি যখন সহজ এবং অপ্টিমাইজড কোডটি লিখতে পারেন তখন তা কেন করবেন না? এটি অবশ্যই করতে ক্ষতি করে না, এমনকি যদি আপনার উচ্চ স্তরের পরিকল্পনা থাকে (কোনও গেম ডেভেলপার কখনও ফ্রেম প্রতি কিছু অতিরিক্ত মাইক্রোসেকেন্ডগুলি অস্বীকার করবে না, যেমন কনসোলগুলিতে)।
teodron

@ টিওড্রন: "আপনি যখন সহজ এবং অপ্টিমাইজড কোডটি লিখতে পারেন তবে তা কেন করবেন না?" - কারণ ওপি (এবং এখন, আমাদের) এখন এমন কিছু অনুকূল করার জন্য একটি অ-অবহেলিত পরিমাণ সময় ব্যয় করেছে যা তার কোনও লাভই করতে পারে না।
ব্লুরাজা - ড্যানি পিফ্লুঘুফুট

@ ব্লুরাজা-ড্যানিপ্লুঘুফুট আমি এটিকে একটি অপ্রাপ্তবয়স্ক হিসাবে সম্মতি জানাই (তাই ফ্রেমের প্রতি কয়েক শ কলের জন্য যদি তুচ্ছ-অপরিশোধন ব্যবহার করা হয় তবে যদি বিশালতার গুণকটি হাজারে বেড়ে যায় তবে বিষয়গুলি অবশ্যই পরিবর্তিত হয়)। যাইহোক, আমরা সকলেই যেটাকে টেকসই না বলে মনে করি তার উত্তর / অপ্টিমাইজ করার চেষ্টা করে সময় নষ্ট না করে মুক্ত are ওপি একটি জিনিস জিজ্ঞাসা করেছিল, লোকেরা ধরে নিয়েছিল যে ওপি উচ্চ স্তরের কৌশল এবং প্রোফাইলিংয়ের পদ্ধতি সম্পর্কে সচেতন নয়। আমি ব্যক্তিগতভাবে মন্তব্যে এমন মন্তব্য করা পছন্দ করি, উত্তরে নয়। এতটা
ভার্বোজ

-3

এটি দূরত্বের আউটপুট (v1, v2) কিসের উপর নির্ভর করে

যদি এটি কোনও ভেক্টরের উপর দশমিক (ভাসা বা দ্বিগুণ) হয় তবে সম্ভবত এটি দূরত্ব অনেক দ্রুত হবে


5
আমি এটি দেখতে পাচ্ছি না এটির floatকোনও কিছুর সাথে কী সম্পর্ক আছে।
মাইকেলহাউস

আমি অন্য ভেক্টরটির উপরে একটি ভাসা বোঝাতে চেয়েছিলাম যা বিশেষভাবে ভালভাবে ব্যাখ্যা করা হয়নি (এবং আমি মনে করি আপনি এটি জানতেন)
রাফপ্লেস

5
আমি ইচ্ছাকৃতভাবে ভুল বোঝাবুঝি ছিল না। আমি কী বলতে চাইছি তা এখনও নিশ্চিত নই। কেন জানি না কেন একটি দূরত্বের ফাংশন কোনও ভেক্টরকে ফিরিয়ে দেবে।
মাইকেলহাউস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.