【发布时间】:2021-02-19 01:00:36
【问题描述】:
我在下面的代码中生成了一个体素球体(椭球体)。
struct Volume {
private int3 r; // radiuses of ellipsoid (3 integers for 3 axes)
public IEnumerable<int3> Iterate()
{
for (var x = -r.x; x <= r.x; x++)
for (var y = -r.y; y <= r.y; y++)
for (var z = -r.z; z <= r.z; z++)
if (x * x + y * y + z * z <= r.x * r.y * r.z)
yield return int3(x, y, z);
}
// return number/index of a point generated in the method above
public int IndexOf(int3 point) => ???
}
然后我将所有条目收集到一个列表中
var sphere = new Volume(3); // radius of sphere is 3
var pointsInSphere = sphere.Iterate().ToArray();
有没有办法实现方法IndexOf而不搜索数组中的点?
例如,我们可以轻松地为体素长方体做到这一点:index = point.x*sizeY*sizeZ + point.y*sizeZ + point.z,但我发现对球体做同样的事情太复杂了,甚至不知道这是否可能。
【问题讨论】: