generated at
Houdini数学 : 点と直線の距離

点と直線の距離を求めるようなVEXを紹介します。

考え方
点から直線に対して垂線を降ろします。 垂線の長さを求めることで、点と直線の距離が求まります。


■VEX
上記の計算式をVEXで実装すると以下のようになります。
calc(c)
// 直線に沿うベクトル vector l0 = point(@OpInput2, "P", 0); vector l = normalize(point(@OpInput2, "P", 1) - point(@OpInput2, "P", 0)); vector p = @P - l0; // 位置ベクトル float k = dot(l, p) / dot(l, l); // 垂線の足までの長さ vector h = p - k * l; // 垂線(点Pと垂線の足を結ぶ直線) float distance = length(h); // 点と直線の距離 f@pscale = distance; // 点と直線の距離をpscaleアトリビュートとして保存

ネットワーク全体


関連
点と直線の距離を利用して、円と線分の接触判定を実装することもできます。