我有地图。在地图顶部有一个多边形A和一个圆B.它们相互交叉。任何算法都可以计算交点C的面积? 什么算法用于查找多边形和圆之间的交集区域?
回答
假设您愿意接近圆(具有大量边的多边形...),那么有一堆算法可用于计算多边形裁剪的结果(请参阅here一个简短的清单)。
一个简单的实现漂亮归结为:
- 确定哪些设置的多边形A的点位于多边形B内,反之亦然
- 确定交点为线段的交叉该内外点边界和
- 从收集的点集构造一个新的多边形。要计算该新多边形的面积,可以将其分解为三角形集合并求和它们的面积。
如果您不想完成所有这些工作,请尝试JS Clipper。它可能会让你的生活更轻松。
如果你不愿意用你的圆圈的任意好的近似值做,我想你必须开始找出多边形线段和圆的边界之间的交点,然后逐段地整合每个段。
通过JS剪辑器后。我不知道从哪里开始使用脚本来计算交叉区域。你能简单地给出一些提示来达到结果吗? – user717166
这可以在不近似做到:多边形和圆形
- 发现路口 - 你将有线段和圆弧区域
- 计算面积的序列使用格林公式:http://en.wikipedia.org/wiki/Green%27s_theorem#Area_Calculation -
Integral[border](x*dy-y*dx)
对于每一个线段计算这个积分是琐事我 - 只是x0*y1-y0*x1
。
对于圆弧它有点冗长。最终结果为Cx*(y1-y0) - Cy*(x1-x0)) + R^2*(t1-t0)
,其中(Cx,Cy)
为圆心,(x0,y0)
为圆弧起点,(x1,y1)
为圆弧终点,t0
为起弧圆弧角度,t1
为圆弧终点角度。
只是为了让每个人都能验证的推导,这里是: (肯定的,它可以从几何图形中得出,但我已经通过公式做了)
Integral[arc](x*dy-y*dx)
Integral[t=t0..t1]((Cx+R*cos t)*R*cos t + (Cy+R*sin t)*R*sin t)dt
Integral[t=t0..t1](Cx*R*cos t + R^2*cos^2 t + Cy*R*sin t + R^2*sin^2 t)dt
Integral[t=t0..t1](Cx*R*cos t + Cy*R*sin t + R^2*sin^2 t + R^2*cos^2 t)dt
Integral[t=t0..t1](Cx*R*cos t + Cy*R*sin t + R^2)dt
Integral[t=t0..t1](Cx*R*cos t + Cy*R*sin t)dt + R^2*(t1-t0)
Integral[t=t0..t1](Cx*R*d(sin t) - Cy*R*d(cos t)) + R^2*(t1-t0)
Cx*R*(sin t1-sin t0) - Cy*R*(cos t1-cos t0)) + R^2*(t1-t0)
Cx*(y1-y0) - Cy*(x1-x0)) + R^2*(t1-t0)
- 1. 查找和表示嵌套的非交叉多边形之间的区域
- 2. 找到一个圆和一组多边形之间的重叠区域
- 3. 使用cgal计算两个多边形的交集区域
- 4. libgdx中的矩形和圆形扇区之间的交集
- 5. 查找凸多边形中向量之间的交集程度
- 6. 圆形和多边形GJK算法
- 7. 计算多边形区域
- 8. 多边形区域计算
- 9. 用于在某个区域拟合2D多边形的算法?
- 10. 圆形曲线之间的区域
- 11. Android查找多边形交集?
- 12. 9计算交集矩阵两个多边形之间
- 13. 为什么无法从不规则多边形的周边找到区域?
- 14. 轨迹与同一区域的圆之间的交集
- 15. Java中多边形的计算区域
- 16. 计算多边形和栅格图像之间的交点
- 17. 查找包围一组点的边界多边形的区域
- 18. 将圆加入多边形的算法
- 19. 计算多个矩形区域相交由圆
- 20. 圆形和多边形之间的Javascript碰撞检测?
- 21. 用于多个多边形的点多边形算法
- 22. 爪哇:多边形A的查找区域不是由多边形B
- 23. Oracle空间计算区域内的多边形组中的一组多边形内部的多边形ID
- 24. 多边形交集
- 25. 查找圆柱体和三角形之间的法线
- 26. 计算轴未对齐的两个矩形之间的交集区域
- 27. 根据信号强度查找位置(圆圈之间的交叉区域)
- 28. OpenLayers 3,几何图形之间的区域交集
- 29. 用于查找圆形/矩形区域内/外的位置的Google地图API?
- 30. 多边形之间的区别
如何一般问题你需要解决?多边形是否总是很简单(非自相交)?如果是这样,多边形是否总是凸的?已知多边形只与两个点相交(如图所示)? –
@TedHopp,是的多边形总是非自相交的。但是是非凸多边形。不,当圆移动内部多边形时,会有更多的点相交。 – user717166
要找到交叉点的区域,首先在两个交点之间划一条线。然后计算多边形其余部分的面积并添加分段的面积。 – Neil