簡體   English   中英

如何獲得對角圓的坐標?

[英]How do I get the coordinates of a diagonal circle?

我幾乎完成了獲得對角圓的坐標。

這是我到目前為止所擁有的。

// 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;
}

這是游戲中的輸出。 它並不完美,因為它會產生一些邊緣,對我來說看起來效率低下。

我該如何糾正? 有一個更好的方法嗎?

這應該與您已經看到的類似,但它更簡單,更順暢:

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)然后將一個旋轉矩陣或一系列旋轉矩陣應用於向量(x,y, Z)。 如果您想稍后微調旋轉量,這將更容易閱讀,更難搞亂。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM