观察远处地形时,不能只比较两点谁更高。同样的高度差放在不同距离上,会形成不同的仰角;近处小坡也可能挡住远处高坡。
把观察者眼睛放在横坐标零、高度e处,地形每隔一单位有一个采样点。某点的视线斜率是高度差除以距离;只有严格大于所有更近采样点的斜率才记为可见。相等表示视线接触前面的不透明地形,也算遮挡。
这一例的完整输入
眼睛高度7,十二处地形高度依次为[0, 15, 6, 18, 4, 1, 9, 12, 17, 4, 12, 16]。
逐项计算记录
距离 | 地形高 | 本点斜率 | 此前最高斜率 | 最高点编号 | 可见 1 | 0 | -7 | None | None | 是 2 | 15 | 4 | -7 | 1 | 是 3 | 6 | -1/3 | 4 | 2 | 否 4 | 18 | 11/4 | 4 | 2 | 否 5 | 4 | -3/5 | 4 | 2 | 否 6 | 1 | -1 | 4 | 2 | 否 7 | 9 | 2/7 | 4 | 2 | 否 8 | 12 | 5/8 | 4 | 2 | 否 9 | 17 | 10/9 | 4 | 2 | 否 10 | 4 | -3/10 | 4 | 2 | 否 11 | 12 | 5/11 | 4 | 2 | 否 12 | 16 | 3/4 | 4 | 2 | 否
读表时先把输入与计算后的结果分开。空值表示这一步没有适用对象或没有可用结果,不应自动换成零。编号只负责识别本例中的元素,同一个数字出现在不同字段时,要先确认它代表位置、对象还是数值。
怎样复核和使用
用分数比较斜率可以避免小数舍入改变边界判断。每次只把已经经过的地形加入最高斜率,不能让更远的坡提前挡住近处的点。表中的遮挡点保留最早达到最高斜率的编号。
这是沿一条竖直截面的地形可见性,采样点之间用直线连接,未描述三维建筑、植被透明度或弯曲地表。游戏地图上不同方向需要分别检查,单条剖面的结果不能当成完整视野。
可以先遮住记录表,只按上述规则重算前两步,再选择一个边界条件重新试算。若结果不一致,应逐项检查输入顺序、端点是否包含以及状态在哪一步更新;不要只看最终合计相同就认为中间处理也完全正确。
![九游会招商[J9总代理]招商合作官方网站](https://agent-j9iuyouhui-j9.com/upload/image/jiu-you-hui-zhao-shang-J9-zong-dai-li-zhao-shang-he-zuo-guan-fang-wang-zhan-logo.webp)