我需要在球面上有六边形网格。如此处所示。
现在我正在做一个六边形扁平网格。 并将其投射到半球的表面上。像这儿, 但正如你所看到的,有趣的神器是边缘上的六边形不成比例地大。应该有一个更好的方法来做到这一点,以便所有六边形的大小几乎相等。
我曾尝试像@spektre建议的解决方案,但我的代码正在制作以下情节。
我使用的是a=sqrt(x*x+y*y)/r * (pi/2)
,因为我希望将a
扩展为[0,r]
到z
[0,r]
,因此角度a
的范围为{{} 1}}。
我有一个问题,现在,六边形在形状上是不相等的。我希望它们在圆顶和圆柱体上具有统一的形状(面积方面)。我对如何管理这个很困惑?
答案 0 :(得分:2)
以下是我的想法:
在XY平面上创建平面六角网格
你的网格的中心必须你选择(0,0,0)
球体的中心,网格的大小至少应该是球体的2 *半径。
将平面坐标转换为球形
因此,从<{1}}到 XY 平面中的点坐标的距离是在球体表面上行进的arclength,因此如果处理点为(0,0,0)
且球半径为{{1}那么球体上的纬度位置是:
(x,y,z)
所以我们可以直接计算z坐标:
r
并将a=sqrt(x*x+y*y)/r;
缩放到球体表面:
z=r*cos(a);
如果x,y
坐标为负,那么你已经越过了半球,应该处理不同(跳过十六进制或转换为圆柱或其他)
这里的小 OpenGL / C ++ 示例:
a=r*sin(a)/sqrt(x*x+y*y);
x*=a; y*=a;
用法:
z
预览:
有关更多信息和想法,请参阅相关内容: