我有一个无限的六边形网格,由三次(xyz)坐标系定义,如下所示:
我还有一个视口——一个矩形画布,我将在其中绘制六边形。
我的问题是这个。因为六边形网格在各个方向上都是无限的,所以我无法一次绘制所有这些。因此,我需要绘制视口中的所有六边形,并且只绘制那些六边形。
这张图片总结了我想要做的事情:
在这张图片中,紫色的六边形是我想要渲染的,而白色的六边形是我不想渲染的。黑色矩形是视口——与它相交的所有六边形都将被绘制。我如何找到要渲染的六边形(即它们的 xyz 坐标)?
其他一些信息:
- 我有一个函数可以调用一个六边形图块,并在给定其三次 xyz 坐标的情况下将其绘制在视口中的位置(x,y)处。因此,我只需要绘制每个矩形的 xyz 坐标,我就可以绘制它们。这可能会简化问题。
我有从立方六边形坐标转换为 x/y 坐标并返回的公式。鉴于上图,r/g/b 是上图的三次坐标轴,x 和 y 是笛卡尔坐标,s 是六边形边的长度...
y = 3/2 * s * b b = 2/3 * y / s x = sqrt(3) * s * ( b/2 + r) x = - sqrt(3) * s * ( b/2 + g ) r = (sqrt(3)/3 * x - y/3 ) / s g = -(sqrt(3)/3 * x + y/3 ) / s r + b + g = 0