光线投射以计算空间的体积

问题描述

我正在尝试使用射线投射来收集房间中的所有表面并确定其体积。 我有一个质心位置,光线将来自此位置,但是我在如何获取所有360度(在3D空间中)的光线方面处于空白。

我在地板或天花板上没有得到任何点,就好像它绕Z轴旋转了60度。 我想剩下的工作都可以了,但这让我很沮丧。

EnemisEntity

enter image description here

enter image description here

解决方法

这样看:vector的x和y是从角度x(在平面中为圆)创建的,然后添加位于-1和1之间的z分量( cos做的)。因此很明显,您最终得到了圆柱分布。

您可能想要的是球坐标。像这样修改您的代码:

for y in range(-90,91):
    for x in range(360):
        vector = DB.XYZ(math.sin(math.radians(x)) * cos(math.radians(y)),math.cos(math.radians(x)) * cos(math.radians(y)),math.sin(math.radians(y))) # Normalize unnecessary,since vector² = sin² * cos² + cos² * cos² + sin² = 1
    prox = ri.FindNearest(origin,direction).Proximity
    point = origin + (direction * prox)

但是请注意,使用球坐标时,射线的角度分布不均匀。两极比赤道更密集。您可以减轻这种情况,例如通过根据x降低y的密度。表面元素按cos(y)²缩小,因此我认为您必须按cos(y)缩小。