- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
坦克轨道需要在坦克的任一侧,坦克可以面向 360 度旋转。这是一张图片来解释这一点:
目前坦克履带只是水平偏移,我正在尝试沿坦克核心垂直偏移它们(不起作用)。
这是我到目前为止所做的:
private void tracksPosition()
{
_DegreeToRadien = Math.toRadians(_degrees);
_ObjectXCenter = (int) (_object_x + ((_itemAnimation.getWidth() / 2)) - _trackAnimationLeft.getWidth() / 2);
_ObjectYCenter = (int) (_object_y + ((_itemAnimation.getHeight() / 2)) - _trackAnimationLeft.getHeight() / 2);
//For left track
_xOffset = -1 * (_itemAnimation.getHeight() / 2);
_trackLeftPosition.set
(
(int)(((_xOffset) * Math.cos(_DegreeToRadien / 2)) + _ObjectXCenter),
(int)(((_xOffset) * Math.sin(_DegreeToRadien / 2)) + _ObjectYCenter)
);
它适用于 X 偏移,但出于某种原因,如果不奇怪,我无法计算出 Y 偏移。
//-------- 答案------------//对于所有想知道我是如何做到这一点的人,这里是答案:
//For left track
//Decide how far away the track is from the tank
_xOffset = _itemAnimation.getHeight() / 1.5;
//Decide where the track is horizontally to the tank (Ie front, back)
_DegreeToRadien = Math.toRadians(_degrees + 110);
//Set the point of the track, takes the centre of the tank and adds the current position, cos and sin basically divide (though multiplication) the current position according to the direction the tank is facing.
_trackLeftPosition.set
(
_ObjectXCenter + (int)(_xOffset * Math.cos(_DegreeToRadien))
,
_ObjectYCenter + (int)(_xOffset * Math.sin(_DegreeToRadien))
);
最佳答案
我需要更多信息来提供帮助,但是:
编辑:
此链接显示了如何围绕原点旋转一个点。 http://en.wikipedia.org/wiki/Rotation_matrix
如果您将坦克的组件表示为一系列相对于原点的顶点,您可以系统地对每个点应用旋转。然后在这些点之间画线以制作旋转的形状是一件小事。例如,如果您的水槽是方形的,您可以决定它的顶点位于 (1,1)、(-1,1)、(-1,-1) 和 (1, -1)。你的轨道会很相似,但左边的轨道可能是 (-1, 1.25), (-1.25, 1.25), (-1.25, -1.25), (-1, -1.25)。相同的旋转矩阵会正确地旋转它们。这将使它们围绕原点旋转。不是您想要的,但这是一个开始。
然后要在 x-y 轴上进行平移,只需将 X 和 Y 坐标添加到坦克的整体 X-Y 坐标即可。
我没有时间刷新我的内存,但有可能稍微大一点的矩阵也可以进行翻译。所以基础坐标、旋转和期望的(x,y)进去,最后的点坐标就出来了。
这可能看起来更复杂,但您的代码会更小且更不容易出错。
关于java - Y 偏移量,坦克上的轨道 - 三角学,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10268425/
我的 Android 应用程序的 Application 对象加载了一个 JNI 库,而 Robolectric 似乎不喜欢那样。当我去运行我的测试 Robolectric 时,我得到了这个堆栈跟踪:
我是一名优秀的程序员,十分优秀!