求一算法

wgf001 2013-12-06 04:37:48
已知四条曲线:AB,CD,EF,GH,求一算法,将这四条曲线组成的区域AREA1转换为多边形。
说明:
1:曲线有断开,如AC处,这种情况直接直线连接闭合即可。
2:曲线可能不是四条,至少两条。
2:曲线是由N个点首尾连接的小线段组成,这些点的坐标已知,保存在集合中。
3:最好用GDI实现
我的思路:顺时针取右侧点。
如:CD、EF相交,取CD上在EF右侧(上方)的点,取EF上在CD右侧(右方)的点。以此类推。
写了一些代码,但是有BUG,就不贴上来了。
另外:如果没有线CD,可能需要将BF封闭,然后将AREA2转换为多边形(可暂不考虑)
总体来说,就要要将“冒尖”的线段ZG、ZB、YH、YF等去掉,剩下的转换为多边形。


...全文
315 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
z03081118 2014-01-02
  • 打赏
  • 举报
回复
引用 7 楼 Tinary3v0 的回复:
先上图




楼主的这种运算我想可能是使用在GIS中关于街道区域的选择上或者进一步的其他用途。
用GDI实现还是有点难的,难在运算复杂程度和运算可靠性上,因为有太多的情况要处理。

因为以前我一直用GDI+,恰巧对这个有点思路,所以就写了个测试程序。程序在这里
程序整体上运行还是可以的,前提是你必须保证区域闭合。也就是你帖子中提到的AREA1必须封闭。
基本思路是这样的,不管你画多少条线,首先将这些线的宽度进行扩展,也就是扩展成如下的情况:
然后,取轮廓(outline)就变成了一下这个样子:
这样你就可以看出来了,你所需要的是上图中三个连续子路径中内部两个中的一个。
根据你上面对问题的描述,只要你保证AREA1封闭。而且没有其他封闭区域,那么你所要的就是取得轮廓后内部的这个闭合区域。这个你可以自己去试试。
关于GDI+就不多说了,自己去看吧。如果觉得可用,测试程序中代码中有关GDI+的地方最好都查查。最重要的就是GraphicPath相关内容。参考MSDN GDI+


使用您的工程并没有画出您所贴的图呀。
如下图
Tinary3v0 2013-12-08
  • 打赏
  • 举报
回复
先上图
楼主的这种运算我想可能是使用在GIS中关于街道区域的选择上或者进一步的其他用途。 用GDI实现还是有点难的,难在运算复杂程度和运算可靠性上,因为有太多的情况要处理。 因为以前我一直用GDI+,恰巧对这个有点思路,所以就写了个测试程序。程序在这里。 程序整体上运行还是可以的,前提是你必须保证区域闭合。也就是你帖子中提到的AREA1必须封闭。 基本思路是这样的,不管你画多少条线,首先将这些线的宽度进行扩展,也就是扩展成如下的情况:
然后,取轮廓(outline)就变成了一下这个样子:
这样你就可以看出来了,你所需要的是上图中三个连续子路径中内部两个中的一个。 根据你上面对问题的描述,只要你保证AREA1封闭。而且没有其他封闭区域,那么你所要的就是取得轮廓后内部的这个闭合区域。这个你可以自己去试试。 关于GDI+就不多说了,自己去看吧。如果觉得可用,测试程序中代码中有关GDI+的地方最好都查查。最重要的就是GraphicPath相关内容。参考MSDN GDI+
wgf001 2013-12-08
  • 打赏
  • 举报
回复
现在考虑在AREA1或AREA2内手动增加一个“种子点”,包含种子点的多边形自动封闭
副组长 2013-12-07
  • 打赏
  • 举报
回复
我觉得不应该这样考虑问题。 要是我就将这分解成两个问题,1是曲线如何延长封闭区域,然后求封闭区域的边界。
zhoujk 2013-12-07
  • 打赏
  • 举报
回复
这样会有歧义,所以AutoDesk公司都没这样做,还是要求用户完成封闭要简单一点。
worldy 2013-12-06
  • 打赏
  • 举报
回复
两两求交点,但是一些特殊情况估计也不好处理
miqing1985 2013-12-06
  • 打赏
  • 举报
回复
关注中!希望有人解决一下!
lee576 2013-12-06
  • 打赏
  • 举报
回复
不知道,但很想知道怎么搞,顶~!!!!

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧