আমি কীভাবে একটি 3D লাইনে 3D পয়েন্ট প্রজেক্ট করতে পারি?


20

ধরা যাক আমি দুটি পয়েন্ট দ্বারা সংজ্ঞায়িত একটি রেখা আছে, Aএবং B, উভয় ফর্ম (x, y, z)। এই পয়েন্টগুলি 3 ডি স্পেসে একটি লাইন উপস্থাপন করে।

আমারও Pএকই বিন্যাসে সংজ্ঞায়িত একটি বিন্দু রয়েছে যা লাইনে নেই that

আমি কীভাবে সেই বিন্দুটির প্রজেকশন গণনা করব? আমি এটি 2 ডি-তে কীভাবে করব তা সম্পর্কে আমি সচেতন তবে 3 ডি মনে করে এতে সমস্ত সংস্থান রয়েছে।

উত্তর:


29

আপনাকে কেবল APভেক্টরটিতে ভেক্টর প্রজেক্ট করতে হবে AB, তারপরে ফলাফল ভেক্টরকে নির্দেশ করতে হবে A

এটি গণনা করার জন্য এখানে একটি উপায়:

A + dot(AP,AB) / dot(AB,AB) * AB

এই সূত্রটি 2D এবং 3 ডি তে কাজ করবে। আসলে এটি সমস্ত মাত্রায় কাজ করে।


ধন্যবাদ মিঃ স্যাম - আপনি উপরের সূত্রটি কীভাবে অর্জন করেছেন?
বিকেএসপুরজন

2
আমি এটি উত্পন্ন করি নি, এটি একটি সুপরিচিত সূত্র যা আপনি অনেক হ্যান্ডবুকগুলিতে খুঁজে পেতে পারেন।
সাম হোচেভার

সি ++ এর মতো প্রোগ্রামিং ভাষায় কীভাবে এটি লিখতে হবে তার কোনও নমুনা আছে?
ভিনিসিয়াস রোচা

1
@ ভিনিসিয়াসেডেলোরোচা ডট হ'ল a.x*b.x+a.y*b.y+a.z*b.z ...ভ্যাক্টরগুলির মধ্যে স্থানাঙ্কিত ক্রিয়াকলাপের মতো আরও কিছু সোজা would
ওসেলোট

4

অজগরটিতে এটি করার একটি দ্রুত এবং সহজ উপায়:

from numpy import *
def ClosestPointOnLine(a, b, p):
    ap = p-a
    ab = b-a
    result = a + dot(ap,ab)/dot(ab,ab) * ab
    return result

ফ্লোট ব্যবহার করুন; আপনার ভেক্টরগুলিতে যদি পূর্ণসংখ্যা থাকে তবে বিভাগটি একটি পূর্ণসংখ্যা বিভাগ হবে এবং ফলাফলগুলি ভুল হবে।


1
/dot(ab,ab)অপ্রয়োজনীয়
ওয়াল্ডো ব্রোনচার্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.