1

我可以使用什么数学公式来围绕给定的 3d 矢量旋转一系列 3d 矢量?

我正在尝试使用 3rd 方库:Math.NET Iridium来计算我的旋转,但我不知道我应该使用什么公式或数学概念。如您所见,数学不是我的强项,因此需要图书馆。

PS:我尝试使用标准System.Windows.Shapes.PolylineSystem.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 回答