点/直線/平面
楽墨堂 小倉康樹

ベクトル演算記号の説明
* : 内積
x : 外積
|A| : Aのサイズ、すなわちsqrt(A*A)


点から直線への垂線。

直線: C + D * t, |D|=1
点: P
垂線と直線の交点: C + D * (P - C) * D
点から垂点へのベクトル: (C - P) - D * (C - P) * D


点から平面への垂線。

平面: N * p + d = 0, |N|=1
点: P
点から垂点へのベクトル: N * (-d) - N * (P * N) = N * ( (-d) - P * N )
垂点: P + N * ( (-d) - P * N ) = P - N * ( d + P * N )
距離: |d + P * N|


直線と直線の最小距離。

直線1: C0 + D0 * t0
直線2: C1 + D1 * t1
最小距離(D0==D1すなわち並行の場合):
|(C1 - C0) - D0 * ((C1 - C0) * D0)|
最小距離(並行でない場合):
| (C0 - C1) * (D0 x D1) / |D0 x D1| |
この時 t0 = ((C1 - C1) * D0 - (D0 * D1) * ((C1 - C0) * D1)) / (1 - (D0 * D1) ^ 2)

2次元の場合
直線1: a * x + b * y + c = 0
直線2: d * x + e * y + f = 0
並行の時の最小距離の2乗:
(c - f) ^ 2 / ( a * a + b * b )


平面と平面。

平面1: N1 * P + d1 = 0
平面2: N2 * P + d2 = 0
交線の方向: N = N1 x N2 / |N1 x N2|
交線上の点で一番、原点に近い点:
Px = Nz * (N1y * d2 - N2y * d1) - Ny * (N1z * d2 - N2z * d1)
Py = Nx * (N1z * d2 - N2z * d1) - Nz * (N1x * d2 - N2x * d1)
Pz = Ny * (N1x * d2 - N2x * d1) - Nx * (N1y * d2 - N2y * d1)
ここで
NN1 = N x N1
NN2 = N x N2
とすると
Px = NN2x * d1 - NN1x * d2
Py = NN2y * d1 - NN1y * d2
Pz = NN2z * d1 - NN1z * d2


Copyright (C) 1998-2009 Ogura Koki All rights reserved.