我想使用 python 计算在地图中绘制的半圆的重叠面积
I want to calculate overlap area from semicircle draw in map using python
我正在尝试计算由 folium.after 创建的半圆创建的重叠区域,我想通过减少相同的值重叠将 x、y、z 值分配给每个半半圆 ex:- 减少两个x值半圆
这是更好理解的图片
如何使用python计算重叠面积?
1。纯数学:
首先,检查它们是否相交:
由于重叠不均匀(正交、垂直或对称),您将需要使用称为 FUNCTIONS(如 f(x))的东西的帮助,并且由于您的 sectors(它们不是半圆)看起来大小相同并且有一个内部区域,您可以使用 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),所有扇区都绘制到相同的坐标(在相同的 'space';如果你在这里理解我的话...):
只需将这两个函数等同起来即可:
规则:如果 f(x) 与 g(x) 相交,反之亦然:
- f(x) = g(x) 在某个点
- g(x)在/穿过f(x)的阴影区域
- f(x)在/穿过g(x)
的阴影区域
- 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图形方法:
现在,我知道这不是一个很好的方法,但如果你不喜欢繁重的数学,你可以实现碰撞检测。
显然,乍一看这听起来很荒谬(因为碰撞检测在游戏编程中使用得更频繁),但读到这里:
circle-circle collision
看看你是否可以在你的象限上实现一种扇形碰撞框(创建圆形碰撞框,将它们限制在扇形范围内,看看它们是否相交。)
老实说,第一种方法是最佳的,假设你有某种形式的 3D 或 2D 笛卡尔系统,你的象限被映射到那里。
虽然数学有点重,但要如何在 python 中实现它取决于您(我强烈建议您创建多个函数并尽可能优化(例如检查交集的 4 条规则以上)).
如果您不知道任何数学概念,google 了解更多,因为了解它们的工作原理会对您有很大帮助...
我正在尝试计算由 folium.after 创建的半圆创建的重叠区域,我想通过减少相同的值重叠将 x、y、z 值分配给每个半半圆 ex:- 减少两个x值半圆
这是更好理解的图片
如何使用python计算重叠面积?
1。纯数学:
首先,检查它们是否相交:
由于重叠不均匀(正交、垂直或对称),您将需要使用称为 FUNCTIONS(如 f(x))的东西的帮助,并且由于您的 sectors(它们不是半圆)看起来大小相同并且有一个内部区域,您可以使用 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),所有扇区都绘制到相同的坐标(在相同的 'space';如果你在这里理解我的话...):
只需将这两个函数等同起来即可:
规则:如果 f(x) 与 g(x) 相交,反之亦然:
- f(x) = g(x) 在某个点
- g(x)在/穿过f(x)的阴影区域
- f(x)在/穿过g(x) 的阴影区域
- 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图形方法:
现在,我知道这不是一个很好的方法,但如果你不喜欢繁重的数学,你可以实现碰撞检测。
显然,乍一看这听起来很荒谬(因为碰撞检测在游戏编程中使用得更频繁),但读到这里:
circle-circle collision
看看你是否可以在你的象限上实现一种扇形碰撞框(创建圆形碰撞框,将它们限制在扇形范围内,看看它们是否相交。)
老实说,第一种方法是最佳的,假设你有某种形式的 3D 或 2D 笛卡尔系统,你的象限被映射到那里。
虽然数学有点重,但要如何在 python 中实现它取决于您(我强烈建议您创建多个函数并尽可能优化(例如检查交集的 4 条规则以上)).
如果您不知道任何数学概念,google 了解更多,因为了解它们的工作原理会对您有很大帮助...