Math 如何围绕另一个点旋转点?

Math 如何围绕另一个点旋转点?,math,rotation,geometry,trigonometry,Math,Rotation,Geometry,Trigonometry,我旋转一个点到另一个点有问题。 我不擅长三角学,所以请帮我改正我的解 要围绕另一个点旋转一个点,我将点移动到坐标系的原点,以便要旋转的点位于坐标系的原点(0,0,0),围绕Z、Y和Z轴旋转点,然后将其向后移动 示例:我需要围绕点y(3,2,1)旋转点x(1,1,1),因此我从点x-x(1-3,1-2,1-1)减去点y的坐标,围绕x、y和z轴旋转点x,然后通过添加y坐标将x``返回到正确的位置。行吗? 对不起,英语不好。你的方法是正确的。它可以应用于不同的操作,如旋转和缩放。如果仅限于具有中心仅位

我旋转一个点到另一个点有问题。 我不擅长三角学,所以请帮我改正我的解

要围绕另一个点旋转一个点,我将点移动到坐标系的原点,以便要旋转的点位于坐标系的原点(0,0,0),围绕Z、Y和Z轴旋转点,然后将其向后移动

示例:我需要围绕点y(3,2,1)旋转点x(1,1,1),因此我从点x-x
(1-3,1-2,1-1)减去点y的坐标,围绕x、y和z轴旋转点x
,然后通过添加y坐标将x``返回到正确的位置。行吗?
对不起,英语不好。

你的方法是正确的。它可以应用于不同的操作,如旋转和缩放。如果仅限于具有中心仅位于原点(0,0,0)附近的几何函数的编程开发环境,则可以应用步骤来执行相对于中心点的操作:

1) Apply a vector to the point to rotate that would move the center point to the origin by:
   a) Determine the vector offset that would move the center point (for example point 3,2,1) to the origin.
      In this case, it is vector <-3,-2,-1>.
   b) Then apply it to the point (in this case  1,1,1 => [1 - 3,1 - 2,1 - 1];
2) Apply the operation (in this case a rotation), and probably a transformation matrix;
3) Apply the reverse of the vector in "1a" to the point determined in step "b" above.
1)将向量应用于要旋转的点,该点将通过以下方式将中心点移动到原点:
a) 确定将中心点(例如点3,2,1)移动到原点的矢量偏移。
在这种情况下,它是向量。
b) 然后将其应用于点(在本例中为1,1,1=>[1-3,1-2,1-1];
2) 应用操作(在本例中为旋转),可能还有变换矩阵;
3) 将“1a”中矢量的相反方向应用于上述步骤“b”中确定的点。
与第一个答案类似的解决方案如下:

了解旋转。 从2D开始。 二维坐标通过两个值(x和y)定义位置。x是沿x轴的距离,y是沿y轴的距离。按照惯例,计算机图形学通常从左到右定义x轴,从上到下定义y轴

注:本答案中的代码是伪代码,不代表任何特定语言

轴 我们可以将轴表示为向量,例如,x轴在x方向上为1个单位,向下为0个单位,y轴在x方向上为0个单位,向下为1个单位

对于代码,我们将向量定义为(例如x轴
xAxis.x=1
yAxis.y=0

Axis有一个重要的特性,它们的长度始终为1个单位。参见下面的单位向量

因此,定义了轴和一个点,我们可以通过先沿x轴移动,然后沿y轴移动来找到它的位置

xAxis={x:1,y:0};//定义x轴
yAxis={x:0,y:1};//定义y轴
点={x:10,y:10};
//定位点首先沿x轴移动距离x
位置x=点x*x轴x;
位置y=点x*x轴y;
//然后沿y轴移动y距离
位置x=位置x+点y*yAxis.x;
位置y=位置y+点y*y轴y;
轮换 这似乎是定位一个点的漫长道路。但当旋转坐标系时,实际上是在旋转x轴和y轴。因此,要获得旋转坐标系中的坐标,需要2个旋转轴。从角度看,请参见下面的单位向量

x轴按旋转量旋转,y轴与x轴成90度角

rotation=PI/4;//使用弧度顺时针旋转45度
//使x轴处于45度
xAxis.x=cos(旋转);
xAxis.y=sin(旋转);
//在距离x轴90度(PI/2)处获取y轴
x=cos(旋转+(PI/2));
y=sin(旋转+(PI/2));
现在我们可以在旋转的坐标系中移动该点

point={x:10,y:10};
//定位点首先沿x轴移动距离x
位置x=点x*x轴x;
位置y=点x*x轴y;
//然后沿y轴移动y距离
位置x=位置x+点y*yAxis.x;
位置y=位置y+点y*y轴y;
有一些捷径。y轴与x轴成90度角(除非倾斜),为了将向量旋转90度,我们交换与y轴相反的分量

//获取45度的x轴
xAxis.x=cos(旋转);
xAxis.y=sin(旋转);
//在与x成90度角时获得y
yAxis.x=-xAxis.y;
y=xAxis.x;
同样沿轴移动,每个组件彼此独立,因此可以在一条直线上进行计算

pos.x=point.x*xAxis.x+point.y*yAxis.x;
位置y=点x*x轴y+点y*y轴y;
起源。 坐标系由原点以及描述轴的单位向量定义。要围绕特定点旋转点,我们需要将旋转点作为原点。然后移动坐标以相对于新原点旋转

point={x:10,y:10};
原点={x:5,y:4};
//相对于原点移动点
位置x=点x-原点x;
位置y=点y-原点y;
现在我们可以应用旋转

rotatedPos.x=pos.x*xAxis.x+pos.y*yAxis.x;
旋转位置y=位置x*x轴y+位置y*y轴y;
但是旋转的点仍然是相对于原点的,我们需要将其移回相对于原点的位置

rotatedPos.x=rotatedPos.x+原点.x;
旋转位置y=旋转位置y+原点y;
在计算机图形学中,我们通常保持相对于其本地原点的相关坐标。它有一个坐标系,我们称之为局部坐标,以[0,0]或三维[0,0,0]为旋转点。这意味着我们可以跳过计算中相对于旋转点移动点的部分

然后,我们可以为每个轴在一条线上进行旋转和定位

pos.x=point.x*xAxis.x+point.y*yAxis.x+origin.x;
位置y=点x*x轴y+点y*y轴y+原点y;
规模 我们想要缩放坐标也是很常见的,这可以通过改变代表每个轴的单位向量的长度来实现。例如,如果我们想沿x轴缩放坐标2倍,我们将x轴设为a轴2倍