C++ 变换矩阵-旋转和变换后的新点坐标

C++ 变换矩阵-旋转和变换后的新点坐标,c++,geometry,openframeworks,C++,Geometry,Openframeworks,虽然网上有很多关于它的教程,但我找不到合适的解决方案!我画了一条线p1=(0,0);p2=(0,j)然后我做一个平移(h,k)和一个旋转(a)。p2的新坐标是什么 下面是我在查看转换矩阵后得出的一般公式,但它似乎不起作用: x' = (x*cos(a)) + (y*-sin(a)) + h y' = (x*sin(a)) + (y*cos(a)) + k 所以我的p2: x' = (j*-sin(ofDegToRad(a))) + h y' = (j*cos(ofDegToRad(a))) +

虽然网上有很多关于它的教程,但我找不到合适的解决方案!我画了一条线
p1=(0,0);p2=(0,j)
然后我做一个
平移(h,k)
和一个
旋转(a)
。p2的新坐标是什么

下面是我在查看转换矩阵后得出的一般公式,但它似乎不起作用:

x' = (x*cos(a)) + (y*-sin(a)) + h
y' = (x*sin(a)) + (y*cos(a)) + k
所以我的
p2

x' = (j*-sin(ofDegToRad(a))) + h
y' = (j*cos(ofDegToRad(a))) + k
我做错了什么

编辑:

上传了下面带有答案的代码,但是它仍然不工作(?)。我已经把一个小样本代码的图像

当我打印值时,它会显示
x=-141.5,y=254.9


我想得到我行的终点(如果起始点在窗口的中间)

,你所示的方程是先进行旋转,然后是平移,这与你所说的顺序相反。如果先进行翻译,则:

x' = x + h
y' = y + k
所以p1'是(h,k),p2'是(h,j+k)。那么旋转是:

x' = (x*cos(a)) - (y*sin(a))
y' = (x*sin(a)) + (y*cos(a))
也就是说你的p1''是

你的p2是

所有这些都假设您从(0,0)处开始了解原点

相反,如果我们先进行旋转,则得到:

p1' = ( 0, 0 ) [when you rotate (0,0) you get (0,0)]
p2' = ( -j*sin(a), j*cos(a) )
然后通过(h,k)进行翻译:


你展示的方程先做旋转,然后做平移,这与你说的顺序相反。如果先进行翻译,则:

x' = x + h
y' = y + k
所以p1'是(h,k),p2'是(h,j+k)。那么旋转是:

x' = (x*cos(a)) - (y*sin(a))
y' = (x*sin(a)) + (y*cos(a))
也就是说你的p1''是

你的p2是

所有这些都假设您从(0,0)处开始了解原点

相反,如果我们先进行旋转,则得到:

p1' = ( 0, 0 ) [when you rotate (0,0) you get (0,0)]
p2' = ( -j*sin(a), j*cos(a) )
然后通过(h,k)进行翻译:


谢谢你的回答,但是它仍然不起作用。我已经在我的问题上添加了一个小示例代码,以防我没有正确地提问!我不清楚你到底在转变什么。如果你要变换线段,而不仅仅是端点,那么你要同时变换两点,我在回答中对这两点进行了编辑。很抱歉打扰你,但仍然存在一个问题。例如,如果我的p1位于(0,0),然后我将其平移到(150150),然后将其旋转1.7弧度-答案应该给我点(150150)。然而,当我应用
x:(150*cos(1.7))-(150*sin(1.7))
的公式时,结果是
-173.768
!对于y:
(150*sin(1.7))+(150*cos(1.7))=129.42
如果将点(150150)旋转1.7弧度,假设(0,0)是原点,则不会得到点(150150),因为您刚刚旋转了它!假设旋转是关于一个已知的原点,即(0,0)。如果(150150)实际上是您的来源,那么请告诉我,我可以更正计算。当你说“旋转”时,必须理解你的意思是什么,这是有道理的!我现在终于明白了。我不知道为什么我的源代码已经移动到了(150150),也许在我第一次翻译时,它已经自动移动了,因为我没有在代码中的任何地方指定它。无论如何,我会很感激你能给我(150150)的答案,所以我对一切都很清楚。再次感谢您宝贵的帮助!谢谢你的回答,但是它仍然不起作用。我已经在我的问题上添加了一个小示例代码,以防我没有正确地提问!我不清楚你到底在转变什么。如果你要变换线段,而不仅仅是端点,那么你要同时变换两点,我在回答中对这两点进行了编辑。很抱歉打扰你,但仍然存在一个问题。例如,如果我的p1位于(0,0),然后我将其平移到(150150),然后将其旋转1.7弧度-答案应该给我点(150150)。然而,当我应用
x:(150*cos(1.7))-(150*sin(1.7))
的公式时,结果是
-173.768
!对于y:
(150*sin(1.7))+(150*cos(1.7))=129.42
如果将点(150150)旋转1.7弧度,假设(0,0)是原点,则不会得到点(150150),因为您刚刚旋转了它!假设旋转是关于一个已知的原点,即(0,0)。如果(150150)实际上是您的来源,那么请告诉我,我可以更正计算。当你说“旋转”时,必须理解你的意思是什么,这是有道理的!我现在终于明白了。我不知道为什么我的源代码已经移动到了(150150),也许在我第一次翻译时,它已经自动移动了,因为我没有在代码中的任何地方指定它。无论如何,我会很感激你能给我(150150)的答案,所以我对一切都很清楚。再次感谢您宝贵的帮助!