math - 如何计算等距矩形/正方形的高度和宽度

标签 math drawing trigonometry tiles isometric

我正在写一个等距瓷砖游戏。每个瓷砖的宽度是高度的两倍(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/

相关文章:

c - 检测正弦波的频率/周期

javascript - AudioContext:将音量增加 x 分贝

algorithm - 找到给定音调和 987654321 的除法余数

javascript - 查找坐标以在直线的末端绘制箭头(等腰三 Angular 形)

用于几何形状的 Python Canvas 库

c# - 在 WPF 中,如何在 WindowsFormsHost 上画一条线?

language-agnostic - 确定经纬度矩形和球体上的圆是否重叠

performance - 对球体应用矩阵变换

javascript - 需要分配员工,使每个部门的平均经验年龄大致相同

Java 正弦和余弦