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アトリビュートとして保存
ネットワーク全体
関連
点と直線の距離を利用して、円と線分の接触判定を実装することもできます。