我正在寻找一种算法,给定两个部分或全部重叠的矩形,找到有序的顶点列表,它定义了表示两个矩形之和的多边形。
更具体一点:
提前感谢您提供任何帮助
更新: 我找到了一种排序顶点以获得多边形的方法,如下所示:
然而,虽然我始终获得一个包围两个矩形的多边形,没有孔或相交边,但它并不总是我想要的多边形(有时它包括不属于其中一个输入矩形的额外区域)。
所以我回到其中一条评论中指出的解决方案,这里也有描述:
答案 0 :(得分:1)
一旦你有4个顶点,你只需使用距离公式找到更远的点(因为看起来我们不能假设共线或未旋转的开始值)
所以如果你有点a =(xA,yA),b,c,d你知道这4个点是一个矩形
float dist(Point a, Point b){ float dx = a.x - b.x; float dy = a.y - b.y; return Math.sqrt(dx * dx + dy * dy); } //somewhere else, where u need it //put point A into index 0 Point curFarthest = b; float distance = dist(a, b); if (dist(a, c) > distance){ curFarther = c; distance = dist(a, c); } else if (dist(a, d) > distance){ curFarther = d; curFarthest = dist(a, d); } //store curFarthest into index 2 // store the rest (exculding points a and curFarthest) // into index 1 and 3 in no particular order
答案 1 :(得分:0)
我正在研究同样的问题,但我使用了不同的方法(工作仍在进行中)。
注意:会有一些特殊情况。但是,我的问题再次围绕具有1个共同点(顶点)的多边形。