Java - 圆上的旋转点

时间:2015-08-17 06:48:33

标签: java 3d geometry trigonometry

一直在玩一些基本的3D。我试图让数学保持相对简单,因为我只在9年级。

背景资料: 我有3个int[]变量名为xpointsypointszpoints。我正在考虑将它们全部放在一个名为nodes的列表中,但决定不这样做。

我尝试的第一个论坛是:

xpoints[i] = (int) (r*Math.cos(Math.toRadians(d)));
ypoints[i] = (int) (r*Math.sin(Math.toRadians(d)));

这适用于围绕一个轴旋转立方体而不是任何其他轴。我找到了一个看起来很有希望用于多轴的公式但却无法使其工作。在每个循环中,面部似乎略微缩小,最终形成一个点(中心)。

xpoints[i] = (int) (x * cos_t - y * sin_t)
ypoints[i] = (int) (y * cos_t + x * sin_t)

应用数学的完整功能:

public void rotateZ(double theta){
    theta = Math.toRadians(theta);
    double cos_t = Math.cos(theta);
    double sin_t = Math.sin(theta);
    for (int i = 0; i < xpoints.length; i++){
        double x = xpoints[i] - x_off;
        double y = ypoints[i] - y_off - ypoints_mod[i];
        xpoints[i] = (int) (x * cos_t - y * sin_t) + x_off;
        ypoints[i] = (int) (y * cos_t + x * sin_t) + y_off + ypoints_mod[i];
        System.out.println(x+", "+y);
    }   
}

如果您需要更多信息,请告诉我(我不太清楚如何说出来)

谢谢,

2 个答案:

答案 0 :(得分:1)

一个9岁男孩的惊人工作!!大!! 搜索euler rotation以在所有3轴上旋转点或矢量。

答案 1 :(得分:1)

嗯......不要只是喜欢电脑编程:)。如代码所示,为方便起见,我将结果四舍五入为Integer。事实证明这完全打破了它,删除它并且它工作正常。

在计算机上做数学的时候不要啰嗦! :P

再也不会