使用哪个公式/函数来旋转一系列点
本文关键字:函数 旋转 一系列 | 更新日期: 2023-09-27 18:16:30
我可以用什么数学公式来旋转一系列关于给定3d向量的3d向量?
我正在尝试使用第三方库:数学。NET铱计算我的旋转,但我不知道什么公式或数学概念,我应该使用。如你所见,数学不是我的强项,因此我需要图书馆。
PS:我试图使用标准的System.Windows.Shapes.Polyline
和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
}
数学背景/公式参见旋转矩阵,"从轴和角度旋转矩阵"一节。
如果你想使用库: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包。但是您可以自己编译它,或者简单地看一下代码,看看它是如何实现的。