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

标签 java android graphics trigonometry

坦克履带需要在坦克的两侧,坦克可以面向360旋转。这是一张图片来解释这一点:

/image/sNHSP.jpg

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

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

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/

相关文章:

java - 突出显示 ListFragment (MultiChoiceModeListener) 中的选定项目?

java - 类扩展了 BufferedImage,但图片不能改变。有什么办法解决这个问题吗?

java - 停止使用的服务包时会发生什么

java - 使用response.body中的对象填充ArrayList

java - 读取、写入 map 到可编辑文本文件 - java、eclipse、android

java - 尝试从在某些标签之间读取的缓冲读取器中提取子字符串

java - 微小的图像,没有旋转,但仍然得到 OutOfMemoryError : bitmap size exceeds VM budget

c# - Xamarin Android应用程序未达到断点

ios - 如何为 iPhone 5 命名图形文件?

Java Awt 钢笔工具 : Graphic disappeared