首页 > 解决方案 > 我想使用python从地图中绘制的半圆计算重叠区域

问题描述

我正在尝试计算由 folium 创建的半圆创建的重叠区域。之后我想通过减少相同的值重叠将 x、y、z 值分配给每个半圆:- 减少两个 x 值半圆
这里是图像为了更好地理解在此处输入图像描述

如何使用python计算重叠区域?

标签: pythonmathspatialfoliumgeopy

解决方案


1.纯数学

首先,检查它们是否相交

由于重叠不均匀(正交、垂直或对称),您将需要使用称为 FUNCTIONS(如 f(x))的东西的帮助,并且由于您的扇区(它们不是半圆)看起来是大小相同并且有一个内部区域,您可以使用 INEQUALITIES 检查它们是否相交。

例如,假设您有两个像这样拦截的扇区,它们具有各自的功能:

f(x) = x^2 + y^2 <= 5 | {0 <= x <= 5} {0 <= y} (RED)

g(x) = ((x - 4)^2) + y^2 <= 5 | {0 <= x <= 5} {0 <= y} (BLUE)

关联

假设一致的笛卡尔系统(x,y),所有扇区都绘制到相同的坐标(在相同的“空间”中;如果你在这里理解我......):

只需将这两个功能等同起来:

规则:如果 f(x) 与 g(x) 相交,反之亦然:

  1. f(x) = g(x) 在某个点
  2. g(x) 在/穿过 f(x) 的阴影区域
  3. f(x) 在/穿过 g(x) 的阴影区域
  4. f(x)的半径+g(x)的半径≥2个扇区之间的距离

注意:如果您的函数不是不等式而是线,则 2 和 3 可能需要微积分来检查。

在此处输入图像描述

由于您正在编写程序,因此您可以提前退出,如果不满足前4 个条件之一,则扇区不会相交。

其次,如果部门确实相交

使用积分计算求相交面积:

∫f(x) - ∫g(x) = the magnitude (size) of the area (make sure the upper and lower limits are specified correctly)

2.使用3D图形方法

现在,我知道这不是一个很好的方法,但如果你不喜欢繁重的数学,你可以实现碰撞检测。

显然,初读这可能听起来完全荒谬(因为碰撞检测是游戏编程中更经常使用的东西),但读到这里:

圈圈碰撞

看看你是否可以在你的象限上实现一种扇区命中框(创建圆形命中框,将它们限制在扇区中,看看它们是否相交。)

不过,老实说,第一种方法是最理想的,假设您有某种形式的 3D 或 2D 笛卡尔系统,您的象限被映射到该系统上。

虽然数学有点繁重,但你想如何在 python 中实现它取决于你(我强烈建议创建多个函数并尽可能优化(如上面检查交集的 4 条规则))。

如果您不知道任何数学概念,请在谷歌上搜索以了解更多信息,因为了解它们的工作原理会对您有很大帮助...


推荐阅读