首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在OpenGL中从另一个帧中求点的坐标

在OpenGL中从另一个帧中求点的坐标
EN

Stack Overflow用户
提问于 2016-01-21 23:40:51
回答 1查看 446关注 0票数 0

我有一个正常的,默认的x,y坐标系。让我们称其为Frame1。然后,我使用以下行创建一个新框架:

代码语言:javascript
复制
glTranslatef(40, 125, 0);
glRotatef(theta, 0.0, 0.0, 1.0); //theta is in degrees here
glTranslatef(-40, -125, 0);

让我们称其为Frame2

我在(x,y)中有一个观点,Frame2。现在,我如何知道与Frame1有关的同一点的坐标?意思是,这个点保持不变,但是它相对于Frame1的坐标是什么?我试过:

代码语言:javascript
复制
alpha = atan2(Y,X);
hypo = Y/sin(alpha);
alphatheta = alpha + theta; //theta is in radians here and so is alpha
newY = hypo * sin(alphatheta);
newX = hypo * cos(alphatheta);

但这不管用。我想在翻译方面有一些不同,因为旋转是围绕(40,125)而不是原点进行的。

那么,我如何找到newX和newY呢?也就是说,如果我在newX,newY中绘制( Frame1 ),我应该从Frame2得到与(X,Y)相同的点。

或者,我甚至可以这样问,如果某个物体围绕某个点(a,b)旋转,以θ角旋转,那么同一物体会旋转多少,围绕原点旋转?

EN

Stack Overflow用户

回答已采纳

发布于 2016-01-22 06:35:48

要做到这一点,一个简单的方法是为每个转换生成矩阵并将它们与Frame2中的点相乘。假设(x, y, z, w)在Frame2中有,(X, Y, Z, W)在Frame1中是等价的,您可以执行以下转换以到达Frame2:

代码语言:javascript
复制
Frame1 -> Transform1 -> Transform2 -> Transform3 -> Frame2
(X, Y, Z, W) = Matrix(T1) x Matrix(T2) x Matrix(T3) x (x, y, z, w)

在您的示例中,它将是:

代码语言:javascript
复制
(newX, newY) = T(40, 125, 0) x R(theta, 0, 0, 1) x T(-40, -125, 0) x (x, y)

现在,TR表示为行主要矩阵:

代码语言:javascript
复制
T(a, b, c) = { {0,0,0,a}, {0,0,0,b}, {0,0,0,c}, {0,0,0,1} }
R(a, 0, 0, 1) = { {cos(a),-sin(a),0,0}, {sin(a),cos(a),0,0}, {0,0,1,0}, {0,0,0,1} }
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34936517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档