数学之美--不规则多边形重叠计算
补充
我的上一篇blog中忽略了一种关系,这种忽略也同样发生在我最初接手这个项目的时候.也就是效果3:一个图完全包含另外一个图,在这种情况下两个多边行是没有交点的.如下图所示:
我很感谢” nile black”,”恋花蝶”和其他朋友的回复.不过,他们的方案都存在一些问题.我同样也和他们一样的思路.
(回过头来看,这篇blog应该改名成,数学之美--”多边形是否重叠计算”)
最初的想法:计算线段相交,在思考这种方法的同时我忽略掉了”效果三”这种可能,我当时认为虽然使用”线段相交”算法逐个比较的计算次数可能较大,但是我还是绝定采用.在我看来能够解决问题才是最重要的.
但是我的希望破灭了,有人提醒了我:还有”效果三”的产生.我一下子突然发现最初的思路解决不了这种情况.一时之间,我尝试了很多思路,甚至想做图象使用比例尺后来计算”异或”,但是这种方法也不可行.
如何办呢?如何办呢?如何办呢?如何解决包含这种情况呢?
当时我开始拼命回忆自己初中,高中以及大学的数学知识,想看看:过去学习过的知识中是否有可以解决这一问题的情况.
但是没有!!!
Google吧,Google.最后的结果是惊喜的,在我Google了大量的网页后,呵呵,我甚至去访问过小学的几何教学网站.
解决方案
我来卖卖关子:最后解决多变形是否有重叠区域还是靠的计算线段相交.各位在看下去之前是否还给自己一些思考的机会呢???
等不及了?我们继续… …
很幸运,我Google出了一个理论,为了方便大家理解我把这个理论分割了一下:
1. 理论一:如果多边形相交(包含),那么任意一个多边行至少有一个”顶点”在另一个多边形怀抱中.给一个简单而咸湿的比喻:男女XXX,一定有某样东西在对方体内.如下图所示:
2. 理论二:从上图中”图1”的顶点向任意一边做平行射线,那么平行射线和多边形图2的至少有一个交点(由于是任意多变形,所以射线可能不只和一条边相交),如下图所示:
3. 理论三(这个理论最关键,前面的都是废话):如果存在一条射线L和图2的线段交点个数为奇数,那么这两个图形必有重叠.
对于理论3,我就不画图了,这里需要大家发挥自己的平面构思能力来思考这一问题.等大家想明白这个理论的时候或许会突然发觉:原来是这样,原来可以这样,原来这么简单我都没有注意到.
(需要提醒的是这个理论还是有一个瑕疵,不过这个瑕疵还是可以解决的,我就故意留下来给大家思考)
如果你想通了以上理论的话,接下来就简单了,就是直线方程的计算机化了.但是千万不要高兴太早:你记得什么是直线方程吗???
很汗颜的是,当时的我确实是忘记了什么是直线方程:y=kx+b,或者ax+by+c=0.如果你都还没有忘记,而且还知道如何求解直线方程的话,恭喜您!
我打算把这篇blog就写到这里,我认为不必把整个算法代码贴在这里.大家如果有兴趣不妨自己动动手.
再次感谢回复我上篇blog的朋友!
附记:之所以用了"数学之美"这个词语,一方面是模仿Google's Blog;另外一方面在我看来:解决这个"多边形是否重叠"问题的最后思路确确实实给了我一种很奇妙的感觉"原来可以这样"
Sean.Pu 2006.08.17 补充:
感谢phoenixsh提醒了我,我确实又以点概面了,本文的理论一确实是有问题的,所以在目前我能提供的解决多边形重叠的问题的方法是:
1,线段相交计算;
2,射线和线段交点计算,至于射线和多变形顶点的交点问题很好解决:
1),由于是原始数据是地理数据,产生射线和多边形顶点相交的概率非常小,
2),如果出现上面说的情况下,在直线方程中变换K的值,重新方程,上文只是为了方便才说"平行射线"
分享到:
相关推荐
ACM算法 计算几何基础 用于计算不规则多边形,凹多边形和凸多边形
四年级下册数学课件--第四单元认识多边形复习青岛版.pdf
C#不规则多边形面积周长计算
简单的不规则封闭多边形面积计算方法。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
8--[画任意多边形].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码8--[画任意多边形].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码8--[画任意多边形].zip源码scratch2.0 3.0编程项目源文件源码...
geojson-area, 计算geojson多边形或者多重多边形的面积 geojson区域计算任意 GeoJSON 几何图形内的区域。用法npm install @mapbox/geojson-area示例var geojsonArea = require('@mapb
点击鼠标绘制不规则多边形,并计算面积.自己复习几何的时候研究实现的一个小功能,无端被涨价了10倍...
写一个C++程序,计算两个多边形的重叠面积 多边形class定义如下: class Polygon { public: Polygon(float* polygon, int vertex) : polygon(polygon), vertex(vertex) {}; private: float* polygon; // 坐标形式...
使用qt计算地理平面下椭圆坐标的 不规则、不封闭 多边形面积。
C# 代码 计算多边形面积 里面有两个方法 计算方式不同
四班级下册数学教案-9 .1 探究多边形 ︳冀教版(2021秋 ).docx
OpenGL 凸多边形截取线段 Cyrus-Beck 算法 OpenGL 凸多边形截取线段 Cyrus-Beck 算法 OpenGL 凸多边形截取线段 Cyrus-Beck 算法 OpenGL 凸多边形截取线段 Cyrus-Beck 算法 OpenGL 凸多边形截取线段 Cyrus-Beck 算法 ...
7-7(添加自定义多边形).7z
五年级上册数学试题-第六单元 《多边形的面积》 同步练习 (扫描版 有答案)人教新课标2014秋.doc
五年级上册数学试题- 第六单元 《多边形的面积》 同步练习 (扫描版 有答案)人教新课标2014秋.doc
计算多边形的重心,对凸多边形有效。先将多边形分解成多个三角形,分别求这些三角形的重心,然后得到一组更少点的集合。
要求不规则多变型的面积的人很好用的。只需要知道顶点坐标。
四年级上册数学单元测试-4.认识多边形 青岛版(五四)(含答案).docx
沪科版(2012)初中数学八年级下册-19.4 综合实践----多边形的镶嵌 教案 .doc