如何获取对角线圆的坐标?

3

我已经快要得到对角线圆的坐标了。

以下是我目前已经得到的内容。

// Center point
double centerX;
double centerY;
double centerZ;
for (double degree = 0D; degree < 360D; degree = degree + 8D) {
    double angle = degree * Math.PI / 180D;
    // Difference from the center
    double x = 1.5D * Math.cos(angle);
    double y;
    if (degree >= 0D && degree < 90D) {
        y = degree / 90D;
    } else if (degree >= 90D && degree < 180D) {
        y = 1D - ((degree - 90D) / 90D);
    } else if (degree >= 180D && degree < 270D) {
        y = -1D * ((degree - 180D) / 90D);
    } else {
        y = -1D * (1D - ((degree - 270D) / 90D));
    }
    double z = 1.5D * Math.sin(angle);
    // New point
    double pointX = centerX + x;
    double pointY = centerY + y;
    double pointZ = centerZ + z;
}

这是游戏中的输出结果。 它并不完美,因为它创建了一些边缘,并且在我看来效率低下。

我该如何纠正它? 是否有更好的方法?

1个回答

2
这应该与你现有的类似,但更简单、更流畅:
double y = 1.0D * Math.sin(angle);

现在,根据这些维度计算出来的结果并不完全是一个圆,而是一个拉伸的椭圆形。如果你想得到一个圆形,请确保余弦和正弦的系数符合勾股定理。例如:

double x = 1.5D * Math.cos(angle);
double y = 0.9D * Math.sin(angle);
double z = 1.2D * Math.sin(angle);

这些系数将确保对于每个角度,x ^ 2 + y ^ 2 + z ^ 2是一个常数。您可以验证这是正确的,给定恒等式cos ^ 2 + sin ^ 2 = 1。(表示斜边的系数应附加到使用不同三角函数的坐标上。)
为了编写最易维护的代码,您可能会发现将(x,y,z)=(cos,sin,0)分配给向量,然后应用旋转矩阵或一系列旋转矩阵更好。如果您想稍后微调旋转量,这将更容易阅读且更难出错。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接