2016-11-24 7 views
0

enter image description herePunkte auf einer Kurve aus einer Kurve fällt

Ich habe zu prüfen, ob ein Punkt mit Halbachsen a und b innerhalb einer Ellipse ist. Ich erzeugte eine Liste von Tupeln (Punkten) und erzeugte dann eine weitere Liste von Tupeln (dotsin), wo ich nur jene Punkte behalte, die innerhalb einer Ellipse liegen.

Wenn jedoch generiert, fallen einige Punkte aus der Ellipse. Ist diese Fehlerakkumulation durch Berechnungen, und wenn ja, wie verbessere ich dies, damit die Punkte nicht aus der Kurve fallen?

Beachten Sie, dass ich in Python ein wenig eingerostet bin und einige Dinge sind nicht offensichtlich für mich. Vielen Dank im Voraus!

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() 
+0

Das Bild ist unter der „Beschreibung eingeben Bild hier“, wenn Sie verwirrt sind, da die Seite nicht zulassen, dass mir noch Bilder zu veröffentlichen. –

Antwort

0

Ihr Zustand ist (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 gleichwertig. Dies ist keine Ellipsengleichung. Eine Ellipsengleichung ist (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

+0

Ich fühle mich jetzt verdammt dumm, rate nächstes Mal, dass ich meinen Code lesen sollte. Danke, dass du mir meinen Fehler gezeigt hast. –

+0

Wenn die Antwort Ihre Frage beantwortet, können Sie sie akzeptieren (und, möglicherweise, upvote), indem Sie auf das Häkchen (und möglicherweise, buttom "oben") links davon klicken. –

Verwandte Themen