我在一本书中发现了这个问题,并正在拼命地解决它。问题本身是:创建一个具有最大高度的屋顶(非平屋顶)。墙壁要么成 90 度角,要么平行。
我的方法:
我有所有的边缘点。所以我可以使用扫描线方法。我将在 x 轴上排序所有点,然后在 y 轴上排序。然后,我将遍历我的整个点列表,并在墙壁上画一条 45° 的线。我将检查是否有任何线与我已经绘制的当前线相交。如果没有匹配,我将转到下一个点并绘制另一条与墙壁成 45° 的线。现在最后两条线相交的机会很高,所以我将在相交点创建一个新点。
我的问题是会有很多特殊情况。有没有我没有想到的更简单的方法?还有其他更适合此类问题的算法吗?你对这类问题有什么想法?
示例:
这就是想象屋顶的样子。