gpt4 book ai didi

java - Y 偏移量,坦克上的轨道 - 三角学

转载 作者:搜寻专家 更新时间:2023-11-01 09:08:17 25 4
gpt4 key购买 nike

坦克轨道需要在坦克的任一侧,坦克可以面向 360 度旋转。这是一张图片来解释这一点:

http://imgur.com/ySFTk

目前坦克履带只是水平偏移,我正在尝试沿坦克核心垂直偏移它们(不起作用)。

这是我到目前为止所做的:

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))
);

最佳答案

我需要更多信息来提供帮助,但是:

  1. 你或许可以更系统地做你想做的事使用一些矩阵数学。
  2. 注释代码中的每个变量。有时这有助于我在事情变得抽象时发现错误。

编辑:

此链接显示了如何围绕原点旋转一个点。 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com