C# 使用哪个公式/函数旋转一系列点

C# 使用哪个公式/函数旋转一系列点,c#,math.net,mathnet-numerics,system.windows.media,C#,Math.net,Mathnet Numerics,System.windows.media,我可以使用什么数学公式来围绕给定的3d向量旋转一系列3d向量 我正在尝试使用第三方库:计算我的旋转,但我不知道我应该使用什么公式或数学概念。正如你所见,数学不是我的强项,因此我需要图书馆 PS:我尝试使用标准的System.Windows.Shapes.Polyline和System.Windows.Media.RotateTransform,但看起来旋转仅在渲染时应用(如果我错了,请纠正我)。应用旋转变换后,我需要知道旋转点的位置 public static XYZ rotateXYZ(XYZ

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

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

PS:我尝试使用标准的
System.Windows.Shapes.Polyline
System.Windows.Media.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
}
有关数学背景/公式,请参见“轴和角度的旋转矩阵”一节

如果您想使用库:Math.NET Iridium(及其后续的Math.NET Numerics)是数值方法库,但您可以使用

请注意,Math.NETSpatial处于非常早期的阶段,因此还没有发布或NuGet包。但是您可以自己编译它,或者只是简单地进行一次测试,看看它是如何实现的

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));