【问题标题】:java skewed shape when rotated旋转时java歪斜的形状
【发布时间】:2019-05-03 16:54:32
【问题描述】:

所以我有一个形状,我想相对于 y 轴旋转它。我很确定我的旋转矩阵是正确的,这是我们指南中旋转矩阵的样子:

这是我实现的代码:

public static void rotate3Dy(float[] xCoords, float[] yCoords, float[] zCoords, float angle) {
    float cosine_angle = (float) Math.cos(angle);
    float sine_angle = (float) Math.sin(angle);

    for (int i = 0; i < yCoords.length; i++) {
        xCoords[i] = (xCoords[i] * cosine_angle) + (zCoords[i] * sine_angle) + 0;
        zCoords[i] = (-xCoords[i] * sine_angle) + (zCoords[i] * cosine_angle) + 0;
    }
}

单独向上/向下/向左/向右旋转形状看起来不错,但是当我在向上/向下旋转后向左或向右旋转时,它开始倾斜。

我在这里错过了什么/做错了什么?

【问题讨论】:

  • 也就是说,不清楚 1)你在说什么数字,2)“倾斜”到底是什么意思,3)你的其他旋转是如何实现的,4)上/下/左/右是什么意思在 x、y 和 z 方面。
  • 你为什么认为这里出了问题?

标签: java graphics awt java-2d rotational-matrices


【解决方案1】:

可能倾斜是由旋转变换中的以下缺陷引起的:在rotate3Dy-方法的循环中,你变换xCoords[i],然后你使用 transformed 值来转换 zCoords[i],而不是使用 xCoords[i]untransformed 值计算后者。

尝试以下操作:在转换之前克隆 xCoords-array,即替换

    for (int i = 0; i < yCoords.length; i++) {
        xCoords[i] = (xCoords[i] * cosine_angle) + (zCoords[i] * sine_angle) + 0;
        zCoords[i] = (-xCoords[i] * sine_angle) + (zCoords[i] * cosine_angle) + 0;
    }

    float[] xCoordsTmp = xCoords.clone();
    for (int i = 0; i < yCoords.length; i++) {
        xCoords[i] = (xCoordsTmp[i] * cosine_angle) + (zCoords[i] * sine_angle) + 0;
        zCoords[i] = (-xCoordsTmp[i] * sine_angle) + (zCoords[i] * cosine_angle) + 0;
    }

也许这能解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-04
    • 1970-01-01
    • 2015-10-12
    • 2019-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多