2017-06-29 6 views

答えて

2

にキューブ上の最も近い点を見つけるのですか3D空間でランダム点にQを持っています

double Dot(Vector3 a, Vector3 b) => a.X * b.X + a.Y*b.Y + a.Z*b.Z; 

とLengthSquared

のように定義されるように定義された内積と
double LengthSquared()=> Dot(this,this); 

超矩形の各独立軸に点を投影して、投影のスカラーパラメータ を見つけます。次に、スカラーパラメータを顔の範囲の に飽和させます。次に、コンポーネントを合計して回答を得ます。

public Vector3 ClosestPointTo 
    (Vector3 q, Vector3 origin, Vector3 v100, Vector3 v010, Vector3 v001) 
{ 
    var px = v100; 
    var py = v010; 
    var pz = v001; 

    var vx = (px - origin); 
    var vy = (py - origin); 
    var vz = (pz - origin); 

    var tx = Vector3.Dot(q - origin, vx)/vx.LengthSquared(); 
    var ty = Vector3.Dot(q - origin, vy)/vy.LengthSquared(); 
    var tz = Vector3.Dot(q - origin, vz)/vz.LengthSquared(); 

    tx = tx < 0 ? 0 : tx > 1 ? 1 : tx; 
    ty = ty < 0 ? 0 : ty > 1 ? 1 : ty; 
    tz = tz < 0 ? 0 : tz > 1 ? 1 : tz; 

    var p = tx * vx + ty * vy + tz * vz + origin; 

    return p; 
} 
関連する問題