我创建了一个小球体模型作为点的立方体。点具有坐标:仅将球体变形为球体
{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