1

特定の 3d ベクトルを中心に一連の 3d ベクトルを回転させるために使用できる数式は何ですか?

サード パーティのライブラリであるMath.NET Iridiumを使用して回転を計算しようとしていますが、どの数式または数学的概念を使用すればよいかわかりません。ご覧のとおり、数学は私の得意分野ではないため、ライブラリが必要です。

System.Windows.Shapes.PolylinePS: 標準を使用しようとしましたSystem.Windows.Media.RotateTransformが、回転はレンダリング時にのみ適用されるようです (間違っている場合は修正してください)。を適用した直後に、回転した点の位置を知る必要がありますRotateTransform

public static XYZ rotateXYZ(XYZ pnt)
{
    Polyline polyline = new Polyline();
    polyline.Points.Add(new Point(pnt.X, pnt.Y)); //, pnt.Z));
    System.Windows.Media.RotateTransform rotateTransform = new System.Windows.Media.RotateTransform(projectRotation, pnt.X, pnt.Y);
    polyline.RenderTransform = rotateTransform;
    return new XYZ(polyline.Points[0].X, polyline.Points[0].Y, pnt.Z); // the points coordinates are the same - not rotated
}
4

1 に答える 1

2

数学的背景/式については、「軸と角度からの回転行列」セクションの回転行列を参照してください。

ライブラリを使用したい場合: Math.NET Iridium (およびその後継の Math.NET Numerics) は数値メソッド ライブラリですが、代わりにMath.NET Spatialを使用できます。

var point = new Point3D(1,1,1);
var vector = new Vector3D(0,0,1);

// will have coordinates (-1,-1,1)
var rotated = point.Rotate(vector, Angle.FromDegrees(180));

Math.NET Spatial は非常に初期段階にあるため、リリースや NuGet パッケージはまだないことに注意してください。ただし、自分でコンパイルすることも、コードを見て実装方法を確認することもできます。

于 2014-08-08T10:52:47.540 に答える