一直在玩一些基本的3D。我试图让数学保持相对简单,因为我只在9年级。
背景资料:
我有3个int[]
变量名为xpoints
,ypoints
和zpoints
。我正在考虑将它们全部放在一个名为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);
}
}
如果您需要更多信息,请告诉我(我不太清楚如何说出来)
谢谢,
答案 0 :(得分:1)
一个9岁男孩的惊人工作!!大!! 搜索euler rotation以在所有3轴上旋转点或矢量。
答案 1 :(得分:1)
嗯......不要只是喜欢电脑编程:)。如代码所示,为方便起见,我将结果四舍五入为Integer
。事实证明这完全打破了它,删除它并且它工作正常。
在计算机上做数学的时候不要啰嗦! :P
再也不会