【问题标题】:(Java - LibGDX) How to rotate a vector to a certain rotation around another vector(Java - LibGDX)如何将向量旋转到围绕另一个向量的特定旋转
【发布时间】:2016-01-20 18:55:54
【问题描述】:

我有一个名为ship 的向量,我需要将每一帧设置为围绕另一个名为center 的向量进行一定的旋转。这是一张图片来说明我的意思。

如您所见,我希望能够将 ship 旋转到围绕 center 的任何旋转,最好是在一个函数中使用 2 个 Vector2 参数作为位置,然后使用 float 进行旋转(度数)。

【问题讨论】:

  • 两件事:1.您使用的是来自 com.badlogic.gdx.math 包的向量吗? 2. 你对线性代数有多熟悉?因为看起来你可能在这里实现了一些矩阵乘法,或者添加了 org.apache.commons.math3.linear
  • 是的,我正在使用来自 com.badlogic.gdx.math.package 的向量;而且我对线性代数一点也不熟悉(我想,除非它只是一个花哨的名字)
  • 在数学术语中,向量操作通常被建模为将列矩阵 (n x 1) 形式的向量乘以方矩阵 (n x n)。乘法的结果是另一列表示转换后的向量的矩阵(n 乘 1)。这是一个 link 说明它是如何在 SVG 中完成的。他们解释得比我好得多。

标签: java math vector rotation


【解决方案1】:

围绕另一个点旋转一个点的数学函数是:

double new_x = current_x * Math.cos(angle) - current_y * Math.sin(angle);
double new_y = current_x * Math.sin(angle) + current_y * Math.cos(angle);

如果您的中心不在 (0,0) 处,则应先将其减去当前值,然后在末尾再次添加,如下所示:

double new_x = (current_x-center_x) * Math.cos(angle) - (current_y-center_y) * Math.sin(angle) + center_x;
double new_y = (current_x-center_x) * Math.sin(angle) + (current_y-center_y) * Math.cos(angle) + center_y;

注意,你的角度应该是弧度而不是度数,一个简单的转换是这样的:

double angle = Math.toRadians(degrees);

希望这有帮助!

【讨论】:

  • 谢谢 - 但只是为了确认一下:current_x 是船的位置,center_x 是旋转的位置吗?
  • 它并没有真正起作用......除非我只是做错了其他事情 - 它对你有用吗?
  • 是的,我搞砸了新的 y 值,我会为你更正。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-25
  • 2014-12-26
  • 1970-01-01
相关资源
最近更新 更多