我正在写一个等距瓷砖游戏。每个瓷砖的宽度是高度的两倍(w:h = 2:1)。 map 中的所有图块大小相同,并且它们的宽度和高度都是已知的(TileWidth 和 TileHeight)。
可以有任意数量的列 (>0) 和行 (>0)。
我正在努力想出一个公式来计算完全绘制的 map 的宽度和高度。这需要是从最顶部到最底部以及最左侧到最右侧的距离。由于列数和行数可能会有所不同(因此 map 并不总是完美的菱形),事实证明这非常困难!
最佳答案
好问题!有一个不太明显的答案,但很容易计算:
我们称行轴为“r”,列轴为“c”,考虑第一张图片,其中沿 r 轴的范围为 5,沿 c 轴的范围为 3。
沿 r 轴的单位增量,相对于绘图平面,角度为 +30 = (cos 30°, sin 30°) = (sqrt(3)/2, 0.5),沿 c 轴的单位增量为-30 = (cos 30°, -sin 30°) = (sqrt(3)/2, -0.5)。
您需要考虑等距矩形的两条对角线。在第一张图中,这些对角线是 D1 = [沿 r 轴的 +5*U 和沿 c 轴的 +3*U] 和 D2 = [沿 r 轴的 +5*U 和沿 c 轴的 -3*U ],其中 U 是等距平面中的瓷砖长度。当变换到绘图平面时,这变为 D1 = ((5+3)*sqrt(3)/2*U, (5-3)/2*U) = (4*sqrt(3)*U, 1* U) 和 D2 = ((5-3)*sqrt(3)/2*U, (5+3)/2*U) = (sqrt(3)*U, 4*U)。因此,屏幕宽度和高度是两个范围中的最大值 = 4*sqrt(3)*U, 4*U。
这可以概括为:如果有 Nr 行 Nc 列,且瓦片长度为 U,则矩形在绘图平面中的对角线范围为 D1 = ((Nr+Nc)*sqrt(3)/2* U, (Nr-Nc)/2*U) 和 D2 = ((Nr-Nc)*sqrt(3)/2*U, (Nr+Nc)/2*U),以及屏幕的宽度和高度,因此, 是:
W = U*(Nr+Nc)*sqrt(3)/2
H = U*(Nr+Nc)/2
关于math - 如何计算等距矩形/正方形的高度和宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4615116/