<p>这可能与你正在做的事情类似。我只是想看看
f(x,y)=x^2/r1^2+y^2/r2^2=1。在</p>
<p>当f(x,y)大于1时,点x,y在椭圆外。当它较小时,它在椭圆内。当f(x,y)小于1时,我遍历每个椭圆,找出一个。在</p>
<p>代码也不考虑偏离原点的椭圆。加入这个功能只是一个小小的改变。在</p>
<pre><code>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()
</code></pre>
<p>此代码生成下图:
<img src="https://i.stack.imgur.com/EA64d.png" alt="enter image description here"/></p>
<p>记住,这只是一个起点。首先,您可以更改<code>inWhichEllipse</code>以接受r1和r2的平方,即(r1*r1,r2*r2)对的列表,这将进一步减少计算量。在</p>