Kugelflächenfunktionen in 3D visualisieren

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Benutzeravatar
MagBen
User
Beiträge: 750
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Kugelflächenfunktionen in 3D visualisieren

Beitragvon MagBen » Sonntag 13. Juli 2014, 12:25

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_harmonics#mediaviewer/File:Spherical_Harmonics.png

Und hier meine Visualisierung mit Hilfe von Numpy, Scipy und Matplotlib:
BildBildBild

Den Python-Code und noch ein paar Abbildungen gibt's auf
http://www.magben.de/?h1=mathematik_fuer_ingenieure_mit_python&h2=kugelflaechenfunktionen
a fool with a tool is still a fool, www.magben.de, YouTube
Benutzeravatar
MagBen
User
Beiträge: 750
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Re: Kugelflächenfunktionen in 3D visualisieren

Beitragvon MagBen » Mittwoch 26. August 2015, 14:29

Die Kugelflächenfunktionen
Bild
sind ein wesentlicher Bestandteil der Atomorbitale vom Wasserstoffatom:
Bild.
Hier (http://www.magben.de/?h1=mathematik_fuer_ingenieure_mit_python&h2=atom_orbital_2d) gibt's nun 2D Visualisierungen dazu. An der 3D Visualisierung arbeite ich noch.
BildBildBildBildBild
a fool with a tool is still a fool, www.magben.de, YouTube
Benutzeravatar
MagBen
User
Beiträge: 750
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Re: Kugelflächenfunktionen in 3D visualisieren

Beitragvon MagBen » Mittwoch 27. Dezember 2017, 12:36

Mit Mayavi
http://docs.enthought.com/mayavi/mayavi/mlab.html#id5

Bild

  1. import numpy as np
  2. from scipy.special import sph_harm
  3. from mayavi import mlab
  4.  
  5. theta_1d = np.linspace(0,   np.pi,  91) # 2 GRAD Schritte
  6. phi_1d   = np.linspace(0, 2*np.pi, 181) # 2 GRAD Schritte
  7.  
  8. theta_2d, phi_2d = np.meshgrid(theta_1d, phi_1d)
  9. xyz_2d = np.array([np.sin(theta_2d) * np.sin(phi_2d),
  10.                    np.sin(theta_2d) * np.cos(phi_2d),
  11.                    np.cos(theta_2d)])
  12.  
  13. # Animierte Ansicht von Y_lm
  14. def show_Y_lm(l, m, camera):
  15.     Y_lm = sph_harm(m,l, phi_2d, theta_2d)
  16.     r = np.abs(Y_lm.real)*xyz_2d
  17.    
  18.     for i in range(camera.shape[0]):
  19.         azimuth,elevation,distance,roll = camera[i]
  20.         mlab.figure(size=(500,500))
  21.         s = mlab.mesh(r[0], r[1], r[2], scalars=Y_lm.real, colormap="cool")
  22.         mlab.view(azimuth=azimuth, elevation=elevation, distance=distance, roll=roll)
  23.         mlab.savefig("plot/Y_%i_%i_%02i.png" % (l,m, i))
  24.  
  25. # kamerafuehrung
  26. nf = 40
  27. camera = np.zeros((nf,4))
  28. camera[:,0] = np.linspace( 70, 55,nf) # azimuth
  29. camera[:,1] = np.linspace( 50,130,nf) # elevation
  30. camera[:,2] = np.linspace(  3,1.2,nf) # distance
  31. camera[:,3] = np.linspace(-50,-50,nf) # roll
  32.  
  33. show_Y_lm(l=3,m=0, camera=camera)
  34. mlab.show()
  35.  
  36. #convert -delay 10 -duplicate 1,-2-1 -loop -0 plot/*.png Y_3_0.gif
a fool with a tool is still a fool, www.magben.de, YouTube
Benutzeravatar
MagBen
User
Beiträge: 750
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Re: Kugelflächenfunktionen in 3D visualisieren

Beitragvon MagBen » Donnerstag 28. Dezember 2017, 09:42

Update
  1. import numpy as np
  2. from scipy.special import sph_harm
  3. from mayavi import mlab
  4.  
  5. theta_1d = np.linspace(0,   np.pi,  91) # 2 GRAD Schritte
  6. phi_1d   = np.linspace(0, 2*np.pi, 181) # 2 GRAD Schritte
  7.  
  8. theta_2d, phi_2d = np.meshgrid(theta_1d, phi_1d)
  9. xyz_2d = np.array([np.sin(theta_2d) * np.sin(phi_2d),
  10.                    np.sin(theta_2d) * np.cos(phi_2d),
  11.                    np.cos(theta_2d)])
  12.  
  13. # Animierte Ansicht von Y_lm
  14. def show_Y_lm(l, m, camera):
  15.     Y_lm = sph_harm(m,l, phi_2d, theta_2d)
  16.     r = np.abs(Y_lm.real)*xyz_2d
  17.    
  18.     mlab.figure(size=(500,500))
  19.     s = mlab.mesh(r[0], r[1], r[2], scalars=Y_lm.real, colormap="cool")
  20.     for i in range(camera.shape[0]):
  21.         azimuth,elevation,distance,roll = camera[i]
  22.         mlab.view(azimuth=azimuth, elevation=elevation, distance=distance, roll=roll)
  23.         mlab.savefig("plot/Y_%i_%i_%02i.png" % (l,m, i))
  24.  
  25. # kamerafuehrung
  26. nf = 40
  27. camera = np.zeros((nf,4))
  28. camera[:,0] = np.linspace( 70, 55,nf) # azimuth
  29. camera[:,1] = np.linspace( 50,130,nf) # elevation
  30. camera[:,2] = np.linspace(  3,1.2,nf) # distance
  31. camera[:,3] = np.linspace(-50,-50,nf) # roll
  32.  
  33. show_Y_lm(l=3,m=0, camera=camera)
  34. mlab.show()
  35.  
  36. #convert -delay 10 -duplicate 1,-2-1 -loop -0 plot/*.png Y_3_0.gif
a fool with a tool is still a fool, www.magben.de, YouTube
Sirius3
User
Beiträge: 7434
Registriert: Sonntag 21. Oktober 2012, 17:20

Re: Kugelflächenfunktionen in 3D visualisieren

Beitragvon Sirius3 » Donnerstag 28. Dezember 2017, 10:04

@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:
  1. def show_Y_lm(l, m, camera):
  2.     Y_lm = sph_harm(m, l, phi_2d, theta_2d)
  3.     r = abs(Y_lm.real) * xyz_2d
  4.    
  5.     mlab.figure(size=(500, 500))
  6.     s = mlab.mesh(r[0], r[1], r[2], scalars=Y_lm.real, colormap="cool")
  7.     for i, (azimuth,elevation,distance,roll) in enumerate(camera):
  8.         mlab.view(azimuth=azimuth, elevation=elevation, distance=distance, roll=roll)
  9.         mlab.savefig("plot/Y_%i_%i_%02i.png" % (l, m, i))
Benutzeravatar
MagBen
User
Beiträge: 750
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Re: Kugelflächenfunktionen in 3D visualisieren

Beitragvon MagBen » Donnerstag 28. Dezember 2017, 12:11

enumerate kommt bei Nicht-Software-Entwicklern schlecht an.

Der Clou von dem Post war auch eher folgendes:
  1. Ich kann bei Mayavi die gleichen Datenstrukturen benutzen wie bei Matplotlib.
  2. Ich brauche weniger Code für das Plotten.
  3. Die 3D-Plots sehen bei Mayavi mehr nach 3D aus als bei Matplotlib.
  4. Ich kann sogar die selbe Farbskala benutzen.
a fool with a tool is still a fool, www.magben.de, YouTube
Benutzeravatar
__deets__
User
Beiträge: 2476
Registriert: Mittwoch 14. Oktober 2015, 14:29

Re: Kugelflächenfunktionen in 3D visualisieren

Beitragvon __deets__ » Donnerstag 28. Dezember 2017, 12:36

Und für die Aussage das enumerate unbeliebt ist hast du sicher einen Beleg, oder?
Benutzeravatar
MagBen
User
Beiträge: 750
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Re: Kugelflächenfunktionen in 3D visualisieren

Beitragvon MagBen » Donnerstag 28. Dezember 2017, 14:06

__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?
a fool with a tool is still a fool, www.magben.de, YouTube
Benutzeravatar
__deets__
User
Beiträge: 2476
Registriert: Mittwoch 14. Oktober 2015, 14:29

Re: Kugelflächenfunktionen in 3D visualisieren

Beitragvon __deets__ » Donnerstag 28. Dezember 2017, 14:10

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?

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder