2011-09-18 114 views
3

我正在寻找算法来计算落在矩形区域内的六边形,无论是否裁剪。在矩形内计算六边形?

我了解以下内容:

rectWidth = 1280; 
rectHeight = 720; 
hexRadius = 50; // middle to corner 
hexHeight = hexRadius * 2; 
hexShortSpan = hexRadius * 0.5; 
hexLongSpan = cos(radians(30)) * hexRadius; 
hexWidth = hexLongSpan * 2; 
hexSide = hexRadius + hexShortSpan; // this is not a side but side + shortSpan for horizontal rows 

想不通国防部运算得到正确的结果。

float A = rectWidth/hexWidth; 
float B = rectHeight/hexSide; 
float hexCount = A * B +????; 
// etc. etc. not sure about the rest... 

罗布

下面是一个图片...

http://moggach.com/media/img/hexGrid.jpg

+0

你对六角形定位有什么了解?你有'锚'六角?什么是定位?像我画或旋转? – Ante

+0

不知道你'锚'的意思是什么'尖',即。旋转 – mogga

+0

带锚我的意思是在矩形中定义一个六边形的位置。它可以是输入参数,也可以有一些请求。在图片中,矩形的左下角也是六角形的“左下角”。所有配置都适用吗? – Ante

回答

0

计算六边形的区域,并与六边形的区域划分矩形的面积。

六边形的面积是

A * A *(3 * SQRT(3))/ 2

其中a是六边形的一边的长度。

+0

虽然这不能解释切割为六角形的区域 - 如果三角形六边形合计到六边形区域,则计为一个。 .. – Per

+0

是啊,这是只有整个六角形区域,并且不知道矩形两边的裁剪六边形 – mogga

+0

谁给了这个评价?这不是一个解决方案。 – mogga

0

提示:计算一边的六角的数量。例如。计算所有十六进制右角(X):...

在第一个六边形中间的左上角,情况不太一般。它可以与计数来解决:

  • 多少不吉利的东西都在第一排(由上边界分割)
  • 多少不吉利的东西都在第二行(仅低于第一个)
  • 有多少行的第一行型(每秒从第一行)
  • 多少行是第二行类型(每秒从第二行)

的这是代码蟒版本:

from math import ceil, cos, sqrt 
rectWidth = 1280 
rectHeight = 720 
hexRadius = 50 
hexHeight = hexRadius * 2 
hexHalfHeight = hexRadius/2 
hexWidth = hexRadius * sqrt(3) 

# First one is corner, ceil() calculates others in row 
num_in_first_row = 1 + ceil((rectWidth - hexWidth) /hexWidth) 
num_in_second_row = ceil(rectWidth/hexWidth) 

# First one is corner, ceil() starts from upper point of next hex on left border 
num_of_first_rows = 1 + ceil((rectHeight - 2 * hexRadius)/(hexHeight + hexRadius)) 
# Starts from upper point of first hex in second row. Coords (hexWidth/2., hexHalfHeight) 
num_of_second_rows = ceil((rectHeight - hexHalfHeight)/(hexHeight + hexRadius)) 

num = num_in_first_row * num_of_first_rows + num_in_second_row * num_of_second_rows 
print num 
+0

寻找一个编程解决方案 - 通过并找出每个六边形中的哪个顶角位于矩形内并非不可能但效率不高 – mogga

+0

您只需找到第一个(可能是输入参数),因为相邻的列位于3/2边缘长度距离,垂直于sqrt(3)/ 4边缘长度。你已经拥有的价值。 – Ante

+0

还应该提到我正在处理尖尖的六边形网格布局。 (旋转90度) – mogga