2016-04-07 16 views
3

Grüße das Problem:ploting Rotationskörper in Python 3 (matplotlib vielleicht)

R ist eine Region, in der xy-Ebene durch die Parabel begrenzt y = x^2 + 1 und Zeile y = x + 3. Ein Rotationskörper wird gebildet, indem R um die x-Achse gedreht wird. Ich muss Parabel und Linie in 2D und solider 3D Revolution zeichnen, wie geht das? Ich habe Anakonda installiert.

+0

Es sieht so aus, als wollten Sie, dass wir einen Code für Sie schreiben. Während viele Benutzer bereit sind, Code für einen in Not geratenen Coder zu produzieren, helfen sie normalerweise nur, wenn das Poster bereits versucht hat, das Problem selbst zu lösen. Eine gute Möglichkeit, diesen Aufwand zu demonstrieren, besteht darin, den Code, den Sie bisher geschrieben haben, die Beispieleingabe (falls vorhanden), die erwartete Ausgabe und die Ausgabe, die Sie tatsächlich erhalten (Konsolenausgabe, Trace-Backs usw.), einzubeziehen. Je mehr Details Sie angeben, desto mehr Antworten erhalten Sie wahrscheinlich. Überprüfen Sie die [FAQ] und [fragen]. – idjaw

Antwort

5

könnten Sie verwenden plot_surface:

import numpy as np 
import matplotlib.pyplot as plt 
import mpl_toolkits.mplot3d.axes3d as axes3d 

fig = plt.figure() 
ax = fig.add_subplot(1, 1, 1, projection='3d') 

u = np.linspace(-1, 2, 60) 
v = np.linspace(0, 2*np.pi, 60) 
U, V = np.meshgrid(u, v) 

X = U 
Y1 = (U**2 + 1)*np.cos(V) 
Z1 = (U**2 + 1)*np.sin(V) 

Y2 = (U + 3)*np.cos(V) 
Z2 = (U + 3)*np.sin(V) 

ax.plot_surface(X, Y1, Z1, alpha=0.3, color='red', rstride=6, cstride=12) 
ax.plot_surface(X, Y2, Z2, alpha=0.3, color='blue', rstride=6, cstride=12) 
plt.show() 

enter image description here

eine Oberfläche zeichnen mit plot_surface Sie beginnen mit zwei 1-dimensionale Parameter zu identifizieren, u und v:

u = np.linspace(-1, 2, 60) 
v = np.linspace(0, 2*np.pi, 60) 

, so dass x, y, z sind Funktionen der Parameter u und v:

x = x(u, v) 
y = y(u, v) 
z = z(u, v) 

Die Sache zu bemerken, über ax.plot_surface ist, dass seine ersten drei Argumente müssen 2D-Arrays sein. So verwenden wir np.meshgrid zu erstellen, um Matrizen-Koordinate (U und V) aus Vektoren Koordinate (u und v) und definieren 2D-Arrays X, Y, Z zu sein Funktionen U und V:

X = U 
Y1 = (U**2 + 1)*np.cos(V) 
Z1 = (U**2 + 1)*np.sin(V) 

Für jeden Ort Auf den Koordinatenmatrizen U und V gibt es einen entsprechenden Wert für X und Y und Z. Dies erzeugt eine Karte von 2-dimensional uv -space zu 3-dimensionalen xyz -space. Für jedes Rechteck in uv -space gibt es ein Gesicht auf unserer Oberfläche in xyz -space. Die von plot_surface gezeichnete gekrümmte Oberfläche besteht aus diesen flachen Flächen.

+0

Ihre Antwort ist für die x-Achse. Könnten Sie mir bitte helfen, den Rotationskörper um die Y-Achse zu finden? – haccks

+0

@hacks: Benutze den obigen Code, ändere einfach "ax.plot_surface (X, Y1, Z1, ...)" in "ax.plot_surface (Y1, X, Z1, ...)" und mache das ähnlich für die Sekunde 'ax.plot_surface' Aufruf. Voila, die Oberfläche der Revolution wird jetzt um die y-Achse sein. Natürlich spielt "X" jetzt die Rolle von "y", und "Y1" und "Y2" sind nun "x" -Werte. Aus Gründen der Übersichtlichkeit sollten Sie daher auch die Variablennamen ändern. Aber das Ergebnis wird einfach durch "Tauschen" von "X" und "Y" Variablen erreicht. – unutbu

+0

Ich habe das versucht, aber kein Glück. Die Rotation entlang verschiedener Achsen ergibt unterschiedliche [Fläche und Form] (https://www.wyzant.com/resources/lessons/math/calculus/integration/finding_volume). Der Wechsel von "Y1" und "X" ergibt die gleiche Fläche und Form. – haccks