图表上的点落在曲线外面

时间:2016-11-24 16:54:50

标签: python plot

enter image description here

我必须检查一个点是否在带有半轴a和b的椭圆内。我生成了一个元组(点)列表,然后生成了另一个元组列表(dotsin),其中我只保留椭圆内的那些点。

但是,生成时,某些点会从椭圆中掉出来。这个错误是通过计算积累的,如果是这样的话,我如何改进这一点,这样点不会脱离曲线?

请注意我在python中有点生疏,有些事情对我来说并不明显。 提前谢谢!

    dots=[(random.uniform(-a,a),random.uniform(-b,b)) for i in range(1000)]#;dots
    dotsin=[(x,y) for x,y in dots if (x**2 + y**2)<((a*cos(atan(y/x)))**2 + (b*sin(atan(y/x)))**2)]#;dotsin
    plt.scatter([x[0] for x in dotsin],[y[1] for y in dotsin])
    plt.grid()

1 个答案:

答案 0 :(得分:0)

您的条件(x**2 + y**2)<((a*cos(atan(y/x)))**2 + (b*sin(atan(y/x)))**2)相当于(x**2 + y**2)**2 < (a*x) ** 2 + (b*y) ** 2。这不是椭圆方程。椭圆方程为(x/a)**2 + (y/b)**2 < 1

from numpy import random
import numpy as np
from math import sin, cos, atan
import matplotlib.pyplot as plt
%matplotlib inline
a = 3
b = 2
n = 1000
dots=[(random.uniform(-a,a),random.uniform(-b,b)) for i in range(n)]#;dots
dotsin=[(x,y) for x,y in dots if (x/a)**2 + (y/b)**2 < 1]#;dotsin
plt.scatter([x[0] for x in dotsin],[y[1] for y in dotsin])
phi = np.linspace(0, 2*np.pi, 200)
plt.plot(a*np.cos(phi), b*np.sin(phi))
plt.grid()

ellips