我搜索了互联网,也许我错过了一些正确的关键字,但我设法找不到这样的东西。我只找到了不完全是图形的多边形线(或只是线条)。我想生成一个图形轮廓(半径 r ),如图所示。有没有可用的东西?我想避免重新发明轮子这么说。
如果有人能够暗示某些事情,或者至少在一些基本原则上如何做到这一点,那就太好了。否则我当然会“自己”发明一个。
最佳的C#。
更新:我需要计算轮廓多边形,而不是直观地绘制它。绿色点表示生成的多边形。 “内部”洞也完全被忽略了。只有一个轮廓多边形就足够了。
更新2 :更好地展示一些更极端的情况。图形的边缘也不会重叠,因此不需要适应它。
更新3 :图片再次更新以反映斜角连接。
答案 0 :(得分:0)
首先,对于从A点到B点的每个“线条”,生成矩形(所有4个点作为“路径”,所以说)。然后搜索两个重叠的矩形并合并它们:
合并有点复杂,这个想法:从计算所有8条线的角度开始(例如,如果矩形顺时针移动)。然后遍历一个矩形直到第一个线 - 线交叉点,检查方向是“外”的角度,并沿第二个矩形的交叉线移动......直到再次到达起点=>现在你遍历了两者的形状(并希望将其保存在某处)。
合并直到只留下一个大块(或多个非重叠的块)。从理论上讲,从任何一点开始,你都可以遍历整个形状,但还有另一个问题:孔是可能的 如果一个形状具有两个或更多个脱离点组(其中组2中没有点可从组1到达,反之亦然),则除了一个分离路径之外的所有点都是孔。获得真正外边界的简单方法是搜索极值,即。具有最大或最小X或Y坐标的点(仅4种组合中的一种足够)。这一点肯定是外边界的一部分。