gpt4 book ai didi

python - 检查坐标是否在坐标系上的某个区域

转载 作者:太空宇宙 更新时间:2023-11-03 15:39:24 27 4
gpt4 key购买 nike

我有一个包含一定数量区域的坐标系,类似于这个: coordinate system

然而,在我的例子中,不同之处在于,所有区域都是唯一编号的,大小都相同,并且有 16 个区域(因此每个象限将有 4 个大小完全相同的切片)。

我还有一组元组(二维坐标),它们都在(-1,-1)和(1,1)之间。如果映射到坐标系,我现在想检查它们会降落在哪个区域(即 1 到 16)。

作为一个初学者,我不知道如何解决这个问题,但这是我目前的方法:

让所有的分界线发挥作用并检查每个点是否在它们的上方和下方。忽略决策边界上的那些

例如:象限 1 有四个区域。从 x 轴到 y 轴(逆时针)我们称它们为 a、b、c 和 d。

a 将是 x 轴和 f1(x) = 0.3333x(红色)之间的区域

b 在 f1 和 f2 之间,f2(x) = x(黄色)

c 在 f2 和 f3 之间,f3(x) = 3x(蓝色)

d 在 f3 和 y 轴之间

graphs

作为代码:

def a(p):
if(y > 0 and y < 0.3333x):
return "a"
else:
b(p)

def b(p):
if(y > 0.3333x and y < x)
return "b"
else:
c(p)

def c(p):
if(y > x and y < 3x):
return "c"
else:
d(p)

def d(p):
if(y > 3x and x > 0):
return "d"

注意:为了便于阅读,我只是为元组各自的坐标写了“x”和“y”,而不是每次都写成 p[0] 或 p[1]。另外,如上所述,我假设函数上没有直接的项目,所以这些都被忽略了。

现在,这是一个可能的解决方案,但我觉得几乎肯定有一个更有效的解决方案。

最佳答案

由于您在 (-1,-1)(1,1) 坐标之间工作,并且等分笛卡尔平面,因此自然而然地使用三角函数功能。在具有 2*pi 度数的酉圆中思考,您将其分成 n 等份(在本例中为 n = 16) .所以每个切片都有 (2*pi)/16 = pi/8 度数。现在你可以想象一个任意点 (x, y) 连接到原点 (0, 0),它与 x 轴形成一个角度。要找到这个角度,您只需计算 y/x 的反正切值。然后你只需要验证它在哪个角度部分。

这是一个草图:

sketch

要直接映射到区间,您可以使用 bisect module :

import bisect
from math import atan2
from math import pi

def find_section(x, y):

# create intervals
sections = [2 * pi * i / 16 for i in range(1, 17)]

# find the angle
angle = atan2(y, x)

# adjusts the angle to the other half circle
if y < 0:
angle += 2*pi

# map into sections
return bisect.bisect_left(sections, angle)

用法:

In [1]: find_section(0.4, 0.2)
Out[1]: 1

In [2]: find_section(0.8, 0.2)
Out[2]: 0

关于python - 检查坐标是否在坐标系上的某个区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53467767/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com