| * : 内積 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 |