【100分】判断一点是否在不规则矩形内的算法(请大家多想几个) 想的算法越多越好!效率越高越好! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 要效率,就不能"实时".我常用的方法有:1 固定的遮罩图形检测2 不规则区域的路径判断这两种属于高效.其他的如:使用GetPixel+Mousemove判断使用多图对比判断等等这些都是属于低效的. System.Drawing.Drawing2D.GraphicsPath _Path = new GraphicsPath(); _Path.AddRectangle(0, 0, 100, 100); _Path.AddRectangle(100, 100, 10, 10); System.Drawing.Region _Region = new Region(_Path); if(_Region.IsVisible(new Point(50,50)) { } else { } 请给出不成立的例子。该算法叫Ray casting algorithm或crossing number algorithm,对正常多边形(边和边没有扭在一起的),是数学上可证明的。 如果正方形的边长是5pix,正方形的的一条边和x轴平行,一个点在正方形的此边上,???如果正方形的边长是6pix,正方形的的一条边和x轴平行,一个点在正方形的此边上,??? 还是我上面的思路,知道四边形的四个坐标,判断范围就行了分别以四个边为x轴,四个角为原型,计算指定点的在以角为圆心的实际坐标,只要该点同时满足在x轴上方或者在x轴上面,那么就是包括在内的。举个例子,ABCD,点E先以AB边为x轴,A点为圆心,那么计算E点相对应A点的坐标,如果在x轴下方,那么退出,如果在x轴上方并且Y轴在圆心的右边,那么继续以BC边为轴,以B点为圆心,依此类推如果在过程中遇到刚好在X轴并且圆心右边直接退出。 对于多边形P={p(1),p(2),...,p(n)}和点A ,假设多边形是个正常的多边形,那么对 角p(1)Ap(2)、角p(2)Ap(3)、角p(3)Ap(4)、……、角p(n-1)Ap(n)、角p(n)Ap(1) 求和,如果结果等于正负360度就说明在多边形内,0度就说明在外部,如果其中的某一个角等于正负180度,则在多边形上,如果A与某个点重合,则也在多边形上。 C# 用FileInfo类删除文件报对xxxx路径的访问被拒绝 将一个Object类型还原成具体子类型 vs2005的winform设计器的工具箱,如何能出现解决方案添加的项目里的自定义控件? 高手们说说你们的学习之路吧 有没有方法直接将PDF格式文件转换成Doc文件?或者TXT文件也可以? 急急急:如何把数据库中Image字段转换为数据流??? 怎么使自己定义的类中的属性在使用时的快捷帮助中显示注释? .net编的东西如何在没有.net的系统上运行呢? 微软的失误! C# 已知点都是椭圆上面的点 几点可以确定椭圆 这样写哪里不对吗? 求一个比较算法
我常用的方法有:
1 固定的遮罩图形检测
2 不规则区域的路径判断
这两种属于高效.其他的如:
使用GetPixel+Mousemove判断
使用多图对比判断
等等
这些都是属于低效的.
_Path.AddRectangle(100, 100, 10, 10);
System.Drawing.Region _Region = new Region(_Path); if(_Region.IsVisible(new Point(50,50))
{
}
else
{
}
如果正方形的边长是6pix,正方形的的一条边和x轴平行,一个点在正方形的此边上,???
判断范围就行了
分别以四个边为x轴,四个角为原型,计算指定点的在以角为圆心的实际坐标,只要该点同时满足在x轴上方或者在x轴上面,那么就是包括在内的。
举个例子,ABCD,点E
先以AB边为x轴,A点为圆心,那么计算E点相对应A点的坐标,如果在x轴下方,那么退出,
如果在x轴上方并且Y轴在圆心的右边,那么继续以BC边为轴,以B点为圆心,依此类推
如果在过程中遇到刚好在X轴并且圆心右边直接退出。
那么对 角p(1)Ap(2)、角p(2)Ap(3)、角p(3)Ap(4)、……、角p(n-1)Ap(n)、角p(n)Ap(1) 求和,
如果结果等于正负360度就说明在多边形内,0度就说明在外部,
如果其中的某一个角等于正负180度,则在多边形上,如果A与某个点重合,则也在多边形上。