1

在二维空间中,我有一个坐标为 x1 和 y1 的对象,它面向特定的方向,我们称之为“查看器”。开始时,测量对象旋转的角度为 0,因此对象开始时始终面​​向相同的方向。角度由称为 yrot 的变量测量。

令 D 为与由 sqrt ((x1-x2)^2 + (y1-y2)^2) 确定的对象的距离,考虑此距离已知。

现在,知道了观察者坐标、D 距离和 yrot 角,我想确定距离观察者对象面部距离为 D 的对象的坐标 x2、y2。

为了澄清这一点,我将添加一个简单的矩阵来解释我想要的:

Z 0 0

0 0 0

0 0 伏

V 是观察者,V 面向 Z。我只对 V 前面有一个物体感兴趣(在特定距离处)。换句话说,假设 Z 与 V 的距离为 D(已知),我只对 Z 是一个对象感兴趣,没有别的。

我相信所需的坐标是 x2 = x1 (+/-) d* sin yrot; y2 = y1 (+/-) d*cos yrot; 我不确定这是否是正确的公式,而且它似乎不起作用。我也不确定第二个操作数的符号。

如果有什么不清楚的地方,请留下评论,我会尽我所能尽快回答。

谢谢!

稍后编辑:|| <- 面向观众的位置,yrot = 0; [] <-查看器

        = [] <- viewer yrot = 90 degrees. 

这应该澄清什么是yrot。此外,对象可以随心所欲地旋转(> 2 PI),它可以顺时针和逆时针旋转。

Charles Bretana 的回答似乎几乎是正确的,我不确定它是否涵盖过度旋转(旋转 > 360 度)和不同方向的旋转。

4

1 回答 1

7

给定一个点 A (ax, ay),点 B (bx, by) 的坐标是在角度 t 表示的方向上与 A 的距离 d(其中t: - pi < t < + pi和从正 x 方向逆时针测量),将是:

 bx = ax + d*cos(t)
 by = ay + d*sin(t)

我不确定这种方法是否符合您的问题,因为从您的问题中不清楚角度yrot代表什么。但是,如果您yrot将观察者的视线与正 X 轴的点 B 之间的角度确定为简单的角度,则上述方法应该有效。

要覆盖过度旋转,只需取 yRot 并减去 2*Pi,直到结果介于 - Pi 和 + Pi 之间

于 2012-12-15T19:13:55.363 回答