3Dポイントを3Dラインに投影するにはどうすればよいですか?


20

私は2つの点で定義された線を持っているとしましょう、AとのB両方の形で(x, y, z)。これらの点は、3D空間の線を表します。

またP、同じ形式で定義されたポイントがあり、それは行にありません。

その点の線への投影をどのように計算しますか?私は2Dでこれを行う方法を知っていますが、3Dにはすべてのリソースが盗まれているようです。

回答:


29

単にvector APをvector に投影しAB、結果のベクトルをpointに追加するだけですA

これを計算する方法の1つを次に示します。

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

この式は2Dおよび3Dで機能します。実際、すべての次元で機能します。


サムさん、ありがとう-上記の式をどのように導きましたか?
BKSpurgeon

2
私はそれを導出しませんでした、それはあなたが多くのハンドブックで見つけることができる有名な公式です。
サムホセバル

C ++のようなプログラミング言語でそれを書く方法のサンプルはありますか?
ビニシウス・ロシャ

1
@ViniciusdeMeloRochaドットはa.x*b.x+a.y*b.y+a.z*b.z ...、ベクトル間の座標ごとの操作と同じくらい簡単な他のすべてのものです。
オセロット

4

Pythonでそれを行うための高速で簡単な方法を次に示します。

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)冗長である
ワルドBronchart
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.