社区
C#
帖子详情
c#判断点在多边形内
lunhuaboys
2008-05-07 11:26:10
如题,这个怎么判断阿,请求解决方案。
...全文
3730
34
打赏
收藏
c#判断点在多边形内
如题,这个怎么判断阿,请求解决方案。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
34 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
jackruan1
2011-10-31
打赏
举报
回复
JerryLia
2011-02-17
打赏
举报
回复
用颜色遮罩的方法没有7楼的效率高。
dylike
2010-05-07
打赏
举报
回复
常见的比如黑色块遮罩,只要判断目标点是否是黑色,则表示该点是否在区域内!当然另一种方法是Contains,从速度上来说,这两种比上面的几种数学计算要快得多.
dylike
2010-05-07
打赏
举报
回复
[Quote=引用 25 楼 yuwenge 的回复:]
用黑色Fill这个多边形的path在一个bitmap上,然后获取该点在bitmap上的颜色,黑色就在多边形内,无色就在多边形外。
我觉得这个方法比数学方法要快,谁没事有空去测试下。
[/Quote]
正解!计算机图形就有数学图形不具备的优势!
zhoujk
2010-05-06
打赏
举报
回复
我刚才说的这种向内折返的多边形会导致算法1和2出错
zhoujk
2010-05-06
打赏
举报
回复
[Quote=引用 16 楼 yatobiaf 的回复:]
我知道在图形学中有三个方法:
1,面积法。就是看所有边和目标点组成的三角形面积和是否等于总的多边形面积,如果相等,则在内部。反之在外部。这种方法计算量较大,用到的主要计算是查乘。
2,夹角和法。参见三楼,判断所有边和目标点的夹角和是否为360度。计算量比上面这种方法稍微小点,用到主要是点乘和求模计算。
3,引射线法。就是从该点出发引一条射线,看这条射线和所有边的交点数目。如果有奇数个交点,则说明在内部,如果有偶数个交点,则说明在外部。这是所有方法中计算量最小的方法,在光线追踪算法中有大量的应用。
[/Quote]
以当前点为起点O,连接3个相邻的点ABC,角度以顺时针方向的为准,如果角AOB为正但是角BOC为负,也就是说C点向内折返,那么算法1和2就会出错吧?只要线OB>线OC,这种折返的多边形就是成立的。
3.应该是正确的,但是应该这么表述:从当前点连接每个顶点,形成条线段,计算这些线段与所有边的交点数目,如果其中有一条线的交点数目为偶数,则当前点在外部。否则在内部。还有另外一个问题,如果当前点与某个顶点重合,或者如果当前点不与任何顶点重合,但是在某条边线上,则返回一个特殊的值
丷丩
2010-05-06
打赏
举报
回复
[Quote=引用 10 楼 yagebu1983 的回复:]
用点,对角线分割多边形为三角形!!
求三角形面积,比较三角形面积!!
[/Quote]
这个有点复杂~
xiaohi22
2010-04-02
打赏
举报
回复
若判断点是否在不规则的封闭曲线中呢?
mowensky
2010-01-13
打赏
举报
回复
标记学习
卧_槽
2010-01-13
打赏
举报
回复
用黑色Fill这个多边形的path在一个bitmap上,然后获取该点在bitmap上的颜色,黑色就在多边形内,无色就在多边形外。
我觉得这个方法比数学方法要快,谁没事有空去测试下。
fut20090715
2010-01-13
打赏
举报
回复
16L总结的很全面
顶一个
liyongjiwang
2010-01-13
打赏
举报
回复
7楼的才是正确的方法~~~~GOOD
denbes
2009-01-15
打赏
举报
回复
[Quote=引用 16 楼 yatobiaf 的回复:]
我知道在图形学中有三个方法:
1,面积法。就是看所有边和目标点组成的三角形面积和是否等于总的多边形面积,如果相等,则在内部。反之在外部。这种方法计算量较大,用到的主要计算是查乘。
2,夹角和法。参见三楼,判断所有边和目标点的夹角和是否为360度。计算量比上面这种方法稍微小点,用到主要是点乘和求模计算。
3,引射线法。就是从该点出发引一条射线,看这条射线和所有边的交点数目。如果有奇数个交点,则说明在内…
[/Quote]
好的归纳
7楼为具体在C#的处理
超级大笨狼
2009-01-15
打赏
举报
回复
这个问题属于算法几何的范围
引一个x轴射线,如果和边的交点是单数就在里边,偶数在外
判断相交,容易,只要线段的两头分别在射线的上下就是相交.
yhy0611
2009-01-15
打赏
举报
回复
我曾经发过这样的贴子,因为使用.net自带的类得到的结果很不理想,里面有位高人帮我写了,你可以参考一下
http://topic.csdn.net/u/20080912/14/1e9b4e1a-cd43-4800-a552-e6da6a95e924.html
null1
2009-01-15
打赏
举报
回复
[Quote=引用 4 楼 Mittermeyer 的回复:]
将多边形生成一个封闭路径,然后用GraphicsPath.IsVisible判断点是否在封闭路径的区域内。
具体看可以看MSDN中GraphicsPath 类的说明。
[/Quote]
7楼是实现
cwmwss
2009-01-15
打赏
举报
回复
openGL里这个很多!你是要画图?
Ador3
2008-06-27
打赏
举报
回复
[Quote=引用 3 楼 huang_8228 的回复:]
算法:
判断一个点是否在多边形里面只要判断该点与所有的相邻两个顶点组成的三角形的以该点为顶点的角的和是否等于360°,不等于360°的就不是在多边形里面的。现在手头没有代码,要的话我找来给你。
[/Quote]
思考中....
yatobiaf
2008-06-27
打赏
举报
回复
我知道在图形学中有三个方法:
1,面积法。就是看所有边和目标点组成的三角形面积和是否等于总的多边形面积,如果相等,则在内部。反之在外部。这种方法计算量较大,用到的主要计算是查乘。
2,夹角和法。参见三楼,判断所有边和目标点的夹角和是否为360度。计算量比上面这种方法稍微小点,用到主要是点乘和求模计算。
3,引射线法。就是从该点出发引一条射线,看这条射线和所有边的交点数目。如果有奇数个交点,则说明在内部,如果有偶数个交点,则说明在外部。这是所有方法中计算量最小的方法,在光线追踪算法中有大量的应用。
在C#中的话,有一个Region类,可以直接调用IsVisible判断是否在这个区域内部,我估计内部的实现应该是上面说的第三种方法。主要看你的需求是哪种输入了,如果在C#中,你完全可以用Region类来隐藏内部实现。
parfum
2008-06-27
打赏
举报
回复
记得这是图形学的算法内容,都忘了
加载更多回复(14)
判断
点
是否在
多边形
内(
C#
实例)
先输入
多边形
的顶
点
数,左击即可
判断
点
击的
点
是否在
多边形
内
c#
实现射线法(用于
判断
点
是否在
多边形
内)
以
点
(0,1),
多边形
顶
点
(1,2),(2,1),(3,3)为例写的一个简单的射线法,主要部分(即:射线法
判断
部分)已实现,可用于任何程序,如需扩展,只需将输入的
点
和顶
点
的
点
数组扩充一下输入方式,即可。 附件包括安装功能。可到http://doolcun.uueasy.com/中查看更新情况,支持下载。
C#
判断
地图坐标
点
是否在
多边形
内坐标组范围内
C#
判断
指定的坐标
点
(经纬度)是否在指定
多边形
内坐标组范围内 !地图坐标
点
判断
(经纬度
判断
)
判断
点
在
多边形
资料
收集的
判断
点
在
多边形
资料 有JAVA,
C#
等
C#
判断
是否是简单
多边形
用
C#
实现了简单多变形的
判断
,全称为可视化操作,在画布上绘制
多边形
,依次
判断
点
点
、
点
线、线线是否相交,从而
判断
是否为简单多变形。答疑邮箱
C#
111,093
社区成员
642,554
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章