所以我决定玩一些基本的3D。我想通过在屏幕上放置一个立方体并能够在所有方向上旋转这个立方体来启动它。我首先在x plane
上旋转它。 我遇到的问题是立方体顶部和底部的两个点(即0-180º标记附近的点)比其他所有点都快。之后的更多解释。
public Integer[] circleMath(int rotation, int x_rot, Double main_x, Double main_z){
Double d = Math.sqrt(Math.pow(100, 2) * 2); // Calculating diametre of circle. Ends up around 141
int tx_rot = x_rot + rotation; // Each point has an offset in rotation from main cube, these are at intervals of 90ª
boolean over = false; // For deciding if to use positive or negative result from sqr
if (tx_rot >= 360){ tx_rot -= 360; } // This occurs when rotation offset is added
if (tx_rot > 180){ tx_rot = 360 - tx_rot; over = true; } // Has gone past 180 degrees, use neg result from sqr
Double z = (main_z - (tx_rot * d / 180) + (d/2)); // Explained below (1)
Double x = (Math.sqrt(Math.pow(d / 2, 2) - Math.pow(z - main_z, 2))); // Uses x^2 + y^2 == r^2
if (over){ x *= -1; } // Neg result
// Returning values
Integer ret[] = new Integer[2];
ret[0] = (int) Math.round((x + main_x));
ret[1] = (int) Math.round(z);
return ret;
}
这是我用来计算各个区域的点数的函数。基本逻辑如下。
z
(对象的旋转)计算x_rot
y
值来查找x (x^2 + y^2 = r^2)
计算z
包括将圆的直径除以180(180º),其余部分不言自明。
以下是我录制的一些结果。
tx_rot: 175 x: -23.240556292613196 z: -66.78230711206282
tx_rot: 176 x: -20.846292265881893 z: -67.56798131338121
tx_rot: 177 x: -18.104634152000347 z: -68.3536555146996
tx_rot: 178 x: -14.824071182362571 z: -69.13932971601798
tx_rot: 179 x: -10.511604404680254 z: -69.92500391733637
tx_rot: 180 x: 0.0 z: -70.71067811865476
您可以看到z
不变为~0.7
,但x
似乎为exponential-ish
。当tx_rot
为180
时,z
达到完美的半径,预计x
将达到最低点。
非常感谢任何有关x为何如此不一致的想法。
如果您需要更多信息,请告诉我,我不知道出了什么问题
旋转0º时的样子:)