1
  • Plane(Normal, d) とVector3点 (x, y, z)を取得しました。
  • X距離のその点に平面を移動する必要があります。それ、どうやったら出来るの?

私はこれを思いついています..

plane = Plane.Transform(plane, Matrix.CreateTranslation(

しかし、そこに何を置くべきかわかりません。それは内積のあるものでなければならずPlane.Normal、私のVector3.

編集:

私はこれを考えています。

public static Plane MoveTo(this Plane p, Vector3 point, float distance)
{
    Vector3 planeVector = p.Normal * p.D;

    Matrix matrix = Matrix.CreateTranslation(Vector3.Normalize(planeVector)) *
        distance * Math.Sign(Vector3.Dot(planeVector, point - planeVector))

    return Plane.Transform(p, matrix);
}

誰かがこれを間違っている、または部分的に間違っていると考えている場合は、注意してください。

4

1 に答える 1

3

点 P から平面 Pi までの距離は次のとおりです。

ここに画像の説明を入力

ここに画像の説明を入力

現在の d(P, pi) を計算し、それに X の量を差し引いてから、D を計算するだけで新しい平面を取得する必要があります。

編集:

 // This line has no sense... is useless do that.
 Vector3 planeVector = p.Normal * p.D;  

点と平面の関係を知るには、その式を計算するだけです: R = Ax + By + Cz + D ここで、(A,B,C) は法線で、(x,y,z) は点です。 ..

(R == 0) 点が平面に含まれている
場合 (R>0) 点が前面にある場合 // またはその逆
(R<0) 点が背面にある場合

R = plane.DotCoordinate(point);    
distance*=(R>0) ? 1 : -1; // or viceversa, i'm not sure now
Matrix matrix = Matrix.CreateTranslation(plane.Normal * distance);
return Plane.Transform(p, matrix);
于 2012-04-13T07:01:37.717 に答える