up:: UE5.0.2
source:: c# - How to find closest point on line? - Stack Overflow
public Vector2 FindNearestPointOnLine(Vector2 origin, Vector2 direction, Vector2 point)
{
direction.Normalize();
Vector2 lhs = point - origin;
float dotP = Vector2.Dot(lhs, direction);
return origin + direction * dotP;
}
中身がどうなってるのか。
目的はoriginを通るベクトルdirection上にある、pointからの最短距離ポイントtを取ること。
まず、後のためにdirectionベクトルをnormalize。とする。
次にoriginからpointへを引く。
そしてとでドット積。これはにへの写像ベクトルを掛けた値。
ここで、はoriginからtへのベクトルと等しい。
また、に原点からoriginへのベクトルを加えると、tの座標と等しくなる。
よって、を算出すればいい。
はで、はドット積を変形してなので、計算式は
となり、コードと一致する。