我創建了一個小球體模型作爲點的立方體。點具有座標:僅將球體變形爲球體
{0 < = X < = 9,0 < = Y < = -9,0 < = Z = < -9}
立方體的內部是空的,所以點存在於立方體的表面上。空的空格在(100,100,100)處表示爲點,當我進行繪製循環時,我忽略與它們相匹配的點,這就是爲什麼在我將在後面發佈的代碼中將這些作爲做某些事情的條件或不這樣做。
目標是獲取立方體的點,並對它們應用變換以將它們映射到球體上。
這是創建爲立方體的位置陣列然後以創建球體位置的陣列的代碼:
// initialize cube array
points = new Matrix[10, 10, 10];
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
for (int k = 0; k < 10; k++)
{
points[i, j, k] = Matrix.CreateTranslation(new Vector3(100, 100, 100));
}
}
}
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
points[i, j, 0] = Matrix.CreateTranslation(new Vector3(i, -j, 0));
points[i, j, 9] = Matrix.CreateTranslation(new Vector3(i, -j, -9));
}
}
for (int j = 0; j < 10; j++)
{
for (int k = 0; k < 10; k++)
{
points[0, j, k] = Matrix.CreateTranslation(new Vector3(0, -j, -k));
points[9, j, k] = Matrix.CreateTranslation(new Vector3(9, -j, -k));
}
}
for (int i = 0; i < 10; i++)
{
for (int k = 0; k < 10; k++)
{
points[i, 0, k] = Matrix.CreateTranslation(new Vector3(i, 0, -k));
points[i, 9, k] = Matrix.CreateTranslation(new Vector3(i, -9, -k));
}
}
// end cube array initialization
// create sphere array
double d;
double theta;
double phi;
double r = 10;
spherePoints = new Matrix[10, 10, 10];
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
for (int k = 0; k < 10; k++)
{
if (points[i, j, k] != Matrix.CreateTranslation(new Vector3(100, 100, 100)))
{
d = Math.Sqrt(Math.Pow(i, 2) + Math.Pow(-j, 2) + Math.Pow(-k, 2));
theta = Math.Acos(-k/d);
phi = Math.Atan2(-j, i);
spherePoints[i, j, k] = Matrix.CreateTranslation(new Vector3((float)(r * Math.Sin(theta) * Math.Cos(phi)),
(float)(r * Math.Sin(theta) * Math.Sin(phi)),
(float)(r * Math.Cos(theta))));
}
else
spherePoints[i, j, k] = Matrix.CreateTranslation(new Vector3(100, 100, 100));
}
}
}
// end creation of sphere array
立方:
不是球體。 ..:
從什麼我可以告訴我完全遵循了公式,但它似乎只能生成球體的八分之一。沿邊緣也出現了奇怪的分組。
@Leonardo對不起,它在這裏說什麼? http://stackoverflow.com/faq#dontask 本網站的目的是獲得編程問題的幫助。我沒有要求任何人爲我做作業。我試圖找出我的代碼中怪異行爲的原因。是否在尋求幫助的網站規則上尋求幫助? – Portaljacker 2013-02-18 17:17:17
關於生成球面點的算法有很多。 http://math.stackexchange.com/questions/299981/generating-evenly-distributed-points-on-a-sphere http://gamedev.stackexchange.com/questions/16585/how-do-you-programmatically-generate -a-sphere http://stackoverflow.com/questions/4349727/generating-points-uniformly-on-a-sphere – Pete 2013-02-18 17:31:19
@Pete這些似乎都是關於製作一個球體。這項任務的目標是將立方體的點變形爲球體上的位置。這些鏈接似乎是指從頭開始製作一個球體。 – Portaljacker 2013-02-18 17:34:29