gpt4 book ai didi

python - 计算椭圆内的点

转载 作者:太空狗 更新时间:2023-10-29 20:19:12 25 4
gpt4 key购买 nike

我正在尝试计算每个椭圆环内的给定数据点:

enter image description here

问题是我有一个函数来检查:所以对于每个椭圆,要确定一个点是否在其中,必须计算三个输入:

def get_focal_point(r1,r2,center_x):
# f = square root of r1-squared - r2-squared
focal_dist = sqrt((r1**2) - (r2**2))
f1_x = center_x - focal_dist
f2_x = center_x + focal_dist
return f1_x, f2_x

def get_distance(f1,f2,center_y,t_x,t_y):
d1 = sqrt(((f1-t_x)**2) + ((center_y - t_y)**2))
d2 = sqrt(((f2-t_x)**2) + ((center_y - t_y)**2))
return d1,d2

def in_ellipse(major_ax,d1,d2):
if (d1+d2) <= 2*major_ax:
return True
else:
return False

现在我正在通过以下方式检查它是否在椭圆中:

for i in range(len(data.latitude)):
t_x = data.latitude[i]
t_y = data.longitude[i]
d1,d2 = get_distance(f1,f2,center_y,t_x,t_y)
d1_array.append(d1)
d2_array.append(d2)
if in_ellipse(major_ax,d1,d2) == True:
core_count += 1
# if the point is not in core ellipse
# check the next ring up
else:
for i in range(loop):
.....

但是我必须计算外环的每对焦点。有没有更有效或更聪明的方法来做到这一点?

最佳答案

这可能与您正在做的事情类似。我只是想看看是否f(x,y) = x^2/r1^2 + y^2/r2^2 = 1。

当f(x,y)大于1时,点x,y在椭圆外。当它更小时,它就在椭圆里面。我遍历每个椭圆以找到 f(x,y) 小于 1 的椭圆。

该代码也没有考虑以原点为中心的椭圆。包含此功能只是一个小改动。

import matplotlib.pyplot as plt
import matplotlib.patches as patches
import numpy as np

def inWhichEllipse(x,y,rads):
'''
With a list of (r1,r2) pairs, rads, return the index of the pair in which
the point x,y resides. Return None as the index if it is outside all
Ellipses.
'''
xx = x*x
yy = y*y

count = 0
ithEllipse =0
while True:
rx,ry = rads[count]
ellips = xx/(rx*rx)+yy/(ry*ry)
if ellips < 1:
ithEllipse = count
break
count+=1
if count >= len(rads):
ithEllipse = None
break

return ithEllipse

rads = zip(np.arange(.5,10,.5),np.arange(.125,2.5,.25))

fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_xlim(-15,15)
ax.set_ylim(-15,15)

# plot Ellipses
for rx,ry in rads:
ellipse = patches.Ellipse((0,0),rx*2,ry*2,fc='none',ec='red')
ax.add_patch(ellipse)

x=3.0
y=1.0
idx = inWhichEllipse(x,y,rads)
rx,ry = rads[idx]
ellipse = patches.Ellipse((0,0),rx*2,ry*2,fc='none',ec='blue')
ax.add_patch(ellipse)

if idx != None:
circle = patches.Circle((x,y),.1)
ax.add_patch(circle)

plt.show()

此代码生成下图: enter image description here

请记住,这只是一个起点。一方面,您可以更改 inWhichEllipse 以接受 r1 和 r2 的平方列表,即 (r1*r1,r2*r2) 对,这会进一步减少计算量。

关于python - 计算椭圆内的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8187996/

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