c++ - 变换矩阵——旋转变换后的新点坐标

标签 c++ geometry openframeworks

虽然网上有很多教程,但我找不到合适的解决方案!我正在画一条线 p1=(0,0); p2=(0,j) 然后我做一个translation(h,k) 和一个rotation(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

我做错了什么?

编辑:

上传了带有下面答案的代码,但它仍然无法正常工作(?)。我放了一张带有小代码示例的图像 Here

当我打印值时,它显示 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''是

( (h*cos(a)) - (k*sin(a)), (h*sin(a)) + (k*cos(a)) )

而你的p2''是

( (h*cos(a)) - (j+k)*sin(a)), (h*sin(a)) + ((j+k)*cos(a)) ).

这些都假设您从 (0,0) 处的已知原点开始。

相反,如果我们先进行旋转,那么我们会得到:

p1' = ( 0, 0 ) [when you rotate (0,0) you get (0,0)]
p2' = ( -j*sin(a), j*cos(a) )

然后通过(h, k)进行翻译:

p1' = ( h, k )
p2' = ( h - j*sin(a), k + cos(a) )

关于c++ - 变换矩阵——旋转变换后的新点坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16760189/

相关文章:

c++ - 在模板类中编写的 lambda 函数不支持 restrict(...) 吗?

javascript - 我需要根据不在中心的点来计算圆弧上的点

c++ - 使用 glFrustum 改变坐标

c++ - 不使用 <string> 解析逗号分隔文件

c++ - 在编译时打印 sizeof(T)

javascript - 在列表中查找不被列表中其他矩形包含的矩形的最快方法

c++ - 完美的填充三角形渲染算法?

c++ - 我可以在 OpenFrameworks 中调用 testApp 以外的应用程序吗?

c++ - 如何在 Code::Blocks 中编译 ".s"汇编文件

c++ - 使用 vector 对堆栈进行排序