Seite 1 von 1
Kugelflächenfunktionen in 3D visualisieren
Verfasst: Sonntag 13. Juli 2014, 12:25
von MagBen
Kugelflächenfunktionen werden in der Physik z.B. für Atommodelle benutzt. Hier soll es aber nicht um die Theorie, sondern um die Visualisierung gehen,
z.B. auf Wikipedia:
http://en.wikipedia.org/wiki/Spherical_ ... monics.png
Und hier meine Visualisierung mit Hilfe von Numpy, Scipy und Matplotlib:
Den Python-Code und noch ein paar Abbildungen gibt's auf
http://www.magben.de/?h1=mathematik_fue ... funktionen
Re: Kugelflächenfunktionen in 3D visualisieren
Verfasst: Mittwoch 26. August 2015, 14:29
von MagBen
Die Kugelflächenfunktionen
sind ein wesentlicher Bestandteil der Atomorbitale vom Wasserstoffatom:
.
Hier (
http://www.magben.de/?h1=mathematik_fue ... orbital_2d) gibt's nun 2D Visualisierungen dazu. An der 3D Visualisierung arbeite ich noch.
Re: Kugelflächenfunktionen in 3D visualisieren
Verfasst: Mittwoch 27. Dezember 2017, 12:36
von MagBen
Mit Mayavi
http://docs.enthought.com/mayavi/mayavi/mlab.html#id5
Code: Alles auswählen
import numpy as np
from scipy.special import sph_harm
from mayavi import mlab
theta_1d = np.linspace(0, np.pi, 91) # 2 GRAD Schritte
phi_1d = np.linspace(0, 2*np.pi, 181) # 2 GRAD Schritte
theta_2d, phi_2d = np.meshgrid(theta_1d, phi_1d)
xyz_2d = np.array([np.sin(theta_2d) * np.sin(phi_2d),
np.sin(theta_2d) * np.cos(phi_2d),
np.cos(theta_2d)])
# Animierte Ansicht von Y_lm
def show_Y_lm(l, m, camera):
Y_lm = sph_harm(m,l, phi_2d, theta_2d)
r = np.abs(Y_lm.real)*xyz_2d
for i in range(camera.shape[0]):
azimuth,elevation,distance,roll = camera[i]
mlab.figure(size=(500,500))
s = mlab.mesh(r[0], r[1], r[2], scalars=Y_lm.real, colormap="cool")
mlab.view(azimuth=azimuth, elevation=elevation, distance=distance, roll=roll)
mlab.savefig("plot/Y_%i_%i_%02i.png" % (l,m, i))
# kamerafuehrung
nf = 40
camera = np.zeros((nf,4))
camera[:,0] = np.linspace( 70, 55,nf) # azimuth
camera[:,1] = np.linspace( 50,130,nf) # elevation
camera[:,2] = np.linspace( 3,1.2,nf) # distance
camera[:,3] = np.linspace(-50,-50,nf) # roll
show_Y_lm(l=3,m=0, camera=camera)
mlab.show()
#convert -delay 10 -duplicate 1,-2-1 -loop -0 plot/*.png Y_3_0.gif
Re: Kugelflächenfunktionen in 3D visualisieren
Verfasst: Donnerstag 28. Dezember 2017, 09:42
von MagBen
Update
Code: Alles auswählen
import numpy as np
from scipy.special import sph_harm
from mayavi import mlab
theta_1d = np.linspace(0, np.pi, 91) # 2 GRAD Schritte
phi_1d = np.linspace(0, 2*np.pi, 181) # 2 GRAD Schritte
theta_2d, phi_2d = np.meshgrid(theta_1d, phi_1d)
xyz_2d = np.array([np.sin(theta_2d) * np.sin(phi_2d),
np.sin(theta_2d) * np.cos(phi_2d),
np.cos(theta_2d)])
# Animierte Ansicht von Y_lm
def show_Y_lm(l, m, camera):
Y_lm = sph_harm(m,l, phi_2d, theta_2d)
r = np.abs(Y_lm.real)*xyz_2d
mlab.figure(size=(500,500))
s = mlab.mesh(r[0], r[1], r[2], scalars=Y_lm.real, colormap="cool")
for i in range(camera.shape[0]):
azimuth,elevation,distance,roll = camera[i]
mlab.view(azimuth=azimuth, elevation=elevation, distance=distance, roll=roll)
mlab.savefig("plot/Y_%i_%i_%02i.png" % (l,m, i))
# kamerafuehrung
nf = 40
camera = np.zeros((nf,4))
camera[:,0] = np.linspace( 70, 55,nf) # azimuth
camera[:,1] = np.linspace( 50,130,nf) # elevation
camera[:,2] = np.linspace( 3,1.2,nf) # distance
camera[:,3] = np.linspace(-50,-50,nf) # roll
show_Y_lm(l=3,m=0, camera=camera)
mlab.show()
#convert -delay 10 -duplicate 1,-2-1 -loop -0 plot/*.png Y_3_0.gif
Re: Kugelflächenfunktionen in 3D visualisieren
Verfasst: Donnerstag 28. Dezember 2017, 10:04
von Sirius3
@MagBen: über den Index zu iterieren ist ein Antipattern, weil man auch direkt über die Elemente iterieren kann. Wenn man trotzdem einen Index braucht, nimmt man enumerate:
Code: Alles auswählen
def show_Y_lm(l, m, camera):
Y_lm = sph_harm(m, l, phi_2d, theta_2d)
r = abs(Y_lm.real) * xyz_2d
mlab.figure(size=(500, 500))
s = mlab.mesh(r[0], r[1], r[2], scalars=Y_lm.real, colormap="cool")
for i, (azimuth,elevation,distance,roll) in enumerate(camera):
mlab.view(azimuth=azimuth, elevation=elevation, distance=distance, roll=roll)
mlab.savefig("plot/Y_%i_%i_%02i.png" % (l, m, i))
Re: Kugelflächenfunktionen in 3D visualisieren
Verfasst: Donnerstag 28. Dezember 2017, 12:11
von MagBen
enumerate kommt bei Nicht-Software-Entwicklern schlecht an.
Der Clou von dem Post war auch eher folgendes:
- Ich kann bei Mayavi die gleichen Datenstrukturen benutzen wie bei Matplotlib.
- Ich brauche weniger Code für das Plotten.
- Die 3D-Plots sehen bei Mayavi mehr nach 3D aus als bei Matplotlib.
- Ich kann sogar die selbe Farbskala benutzen.
Re: Kugelflächenfunktionen in 3D visualisieren
Verfasst: Donnerstag 28. Dezember 2017, 12:36
von __deets__
Und für die Aussage das enumerate unbeliebt ist hast du sicher einen Beleg, oder?
Re: Kugelflächenfunktionen in 3D visualisieren
Verfasst: Donnerstag 28. Dezember 2017, 14:06
von MagBen
__deets__ hat geschrieben:Und für die Aussage das enumerate unbeliebt ist hast du sicher einen Beleg, oder?
Foto vom Gesichtsausdruck oder war stellst du dir als Beleg vor?
Re: Kugelflächenfunktionen in 3D visualisieren
Verfasst: Donnerstag 28. Dezember 2017, 14:10
von __deets__
Das DU enumerate nicht magst, das glaube ich sofort, und ohne Beleg. Aber Bei Aussagen über von Gruppen von Leuten reicht ein Datenpunkt nicht. Wenn du behauptest, nicht-Softwareentwickler (geschätzt 7 Milliarden Menschen) mögen etwas nicht, dann sollte man das schon belegen können. Oder nicht?