私は2つの点で定義された線を持っているとしましょう、A
とのB
両方の形で(x, y, z)
。これらの点は、3D空間の線を表します。
またP
、同じ形式で定義されたポイントがあり、それは行にありません。
その点の線への投影をどのように計算しますか?私は2Dでこれを行う方法を知っていますが、3Dにはすべてのリソースが盗まれているようです。
私は2つの点で定義された線を持っているとしましょう、A
とのB
両方の形で(x, y, z)
。これらの点は、3D空間の線を表します。
またP
、同じ形式で定義されたポイントがあり、それは行にありません。
その点の線への投影をどのように計算しますか?私は2Dでこれを行う方法を知っていますが、3Dにはすべてのリソースが盗まれているようです。
回答:
単にvector AP
をvector に投影しAB
、結果のベクトルをpointに追加するだけですA
。
これを計算する方法の1つを次に示します。
A + dot(AP,AB) / dot(AB,AB) * AB
この式は2Dおよび3Dで機能します。実際、すべての次元で機能します。
a.x*b.x+a.y*b.y+a.z*b.z ...
、ベクトル間の座標ごとの操作と同じくらい簡単な他のすべてのものです。
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
フロートを使用します。ベクトルに整数が含まれている場合、除算は整数除算になり、結果は不正確になります。
/dot(ab,ab)
冗長である