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

本文关键字:函数 旋转 一系列 | 更新日期: 2023-09-27 18:16:30

我可以用什么数学公式来旋转一系列关于给定3d向量的3d向量?

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

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
}

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

数学背景/公式参见旋转矩阵,"从轴和角度旋转矩阵"一节。

如果你想使用库:Math。NET Iridium(及其后继产品Math。. NET Numerics)是数值方法库,但您可以使用Math。. NET space .

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

注意数学。. NET Spatial还处于非常早期的阶段,因此还没有发布版本或NuGet包。但是您可以自己编译它,或者简单地看一下代码,看看它是如何实现的。