如何确定两个多边形是一样的?

时间:2015-06-02 07:43:31

标签: javascript algorithm geometry

我有一个多边形,它有五个这样的点: enter image description here

然后我将另一个点添加到多边形(红色的一个): enter image description here

确定两个多边形的算法是相同的(不仅角度/长度相同,坐标也相同)。

3 个答案:

答案 0 :(得分:1)

因为相同的意思是相同的形状,大小,方向和位置

  • 然后很简单
  • 您有2个多边形定义为点集
  • A={ a0,a1...a(n-1) }B={ b0,b1,...b(m-1) }

对于初学者我假设你没有过采样(行总是不超过2分)

  1. 比较m,n

    • 如果不相同的形状不同那么停止
    • 否则m==n所以我将从现在开始使用n
  2. (a(i)==b(j))

    中找到i,j=<0,n)
    • 如果多边形不是从同一点开始,则需要这样做
    • 否则i=0,j=0
    • 对于复杂(自相交)形状,您需要找到独特的点
    • (不重复,或具有相同下一个点的相同重复数)
    • 否则只需设置i=0并使用单个j循环查找O(n)
    • 如果找不到共同点停止(不是相同的多边形)
  3. 比较分数

        for (k=0;k<n;k++)
         {
         if (a(i)!=b(j)) return false; // not the same
         i++; if (i>=n) i=0;
         j++; if (j>=n) j=0;
         } return true; // are the same
    
    • 点对比可以像if (|a(i)-b(j)|>=max_difference_treshold)
    • 那样进行
    • 无需比较sqrt-ed距离,阈值可以由2代替
    • 我通常会使用1e-61e-10
    • 之类的内容
  4. 对于过采样的多边形,您需要首先对展位A,B的点进行重新取样

    • 选择3个相邻点p(i-1),p(i),p(i+1)
    • 计算dx,dy在2对之间
    • d1=p(i)-p(i-1); dx1=p1.x; dy1=p1.y;
    • d2=p(i+1)-p(i); dx2=p2.x; dy2=p2.y;
    • 如果(dx1*dy2==dx1*dy1),则从集合
    • 中删除p(i)
    • 你应该在此
    • 之前单独处理零个案(任何dx,dy为零)

答案 1 :(得分:0)

 //import turf library
 var turf = require('@turf/turf');

 // create polygon using turf or you can directly use geoJSON
 var polygon1 = turf.polygon(firstPolygonCoordinates);
 var polygon2 = turf.polygon(secondPolygonCoordinates);

 // Compare two polygon using turf's booleanEqual method
 if (turf.booleanEqual(polygon1, polygon2)) {
    // Add your logic here
 }

答案 2 :(得分:-1)

取决于您的观点。两个矩形可以独立于位置而相同。

  • 如果要求位置,则需要比较顶点 坐标。
  • 如果不是要求,你应该比较 矩形大小。在这种情况下,您需要获取之间的距离 顶点。在这种情况下,我的建议是你应该使用矩形 基础和高度进行比较。