gpt4 book ai didi

delphi - 六角格计算

转载 作者:行者123 更新时间:2023-12-03 19:03:11 24 4
gpt4 key购买 nike

我想做的是创建一个如下所示的十六进制网格。



我可以画十六进制,但不确定如何使它们交错。所以第一行应该是
(0,0)(0,1)(0,2)(0,3)在图像中,第二行应为(1,0)(1,1)(1,2)(1,3)等该行中的偶数十六进制始终交错排列。

目前我知道要使用的行数/列数
hexRows
hexColumns

而我如何绘制十六进制是这样的,i只是在绘制十六进制时编号。
DrawSolidHex(x,y,i);

当前代码看起来像这样

 begin
hexcolumns := c;
hexrows := r;
i:=1; //first cube
x := 1; //default x,y,z values
y := 1;
z := 0;
while hexrows>0 do
begin
columnssave := hexcolumns ;
while hexcolumns >0 do
begin
DrawSoildHex(X,Y,i);
i:=i+1;
x := x + 1;
hexcolumns := hexcolumns -1;
end;
y:=y+1;
x:= 1;
z:=0;
hexcolumns := columnssave;
hexrows:= hexrows-1;
end;
totalhex := i;


当前使用此代码它将只在一条直线上绘制十六进制x,y(1,1)(2,1)(3,1).. ect我不确定如何添加偏移量,计算偏移量和代码它会交错排列行。

最佳答案

在如下所示的六边形中,您需要了解构成边缘的三角形:

    B                   B
*--* *
/| \ /|
/ | \ / |
A*--*C * ==> c / | a
\ / / |
\ / / |
*--* A*-----*C
b


这些三角形被称为30-60-90三角形,因为它们是构成内角的角度: C = 90A = 60B = 30

这些三角形的边的比率为 c = 2b = 1a = sqrt(3)

因此,假设您知道 c(这是六边形边之一的长度),则可以计算该三角形的另外两个边,而不必求助于三角函数:

a = c * sqrt(3) / 2
b = c / 2


一旦知道了这些值,就可以很容易地通过仅关注网格并使用每个六边形的最左角(在我的上图中的 A)作为起点和终点来计算六边形偏移。

(0,0)(0,1)的水平距离为 b + c + b - b(朝东北,向东,东南和西南方向)。这是一行中所有“相邻”单元格之间的水平差异,它简化为 b + c3 * c / 2(如果您只想使用 c)。

(0,0)(0,1)的垂直距离(半行)只是 a(东南,然后是不相关的东方)。这等效于 sqrt(3) * c / 2或可能与 c * 433 / 500足够接近(16,000的误差之一),以致不必包含均方根。

虽然,如果您希望更高的精度,则可以坚持平方根计算-只需记住在开始时计算一次 sqrt(3) / 2并将其用作乘数即可。

行之间的垂直距离显然是 (0,0)(1,0)的两倍。

因此,对于每整行,您只需向下移动 c * 433 / 250个单位。对于每一列,您将移动 c * 3 / 2单位和垂直移动 c * 433 / 500单位(如果从偶数索引移动到奇数索引,则向下移动,否则向上移动)。

关于delphi - 六角格计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24400103/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com