ElectrPotential

Einführung

Angeregt durch ein textbasiertes DOS-Programm unseres Dozenten in "Grundlagen der Elektrotechnik" habe ich etwas ähnliches in Java programmiert, weil ich den Algorithmus interessant fand.

Das Programm berechnet das elektrische Potential in einem Dielektrikum (und eigentlich auch jedem Leiter, dessen Widerstand > 0 ist). Zum Beispiel ein Kondensator (rechts).

Die grauen Bereiche sind die Elektroden, die grünen Linien sind die Äquipotentiallinien. Der weiße Bereich zwischen den Elektroden ist das Medium, das durch ein Raster unterteilt wird. Für jeden Punkt im Raster wird ein Potential berechnet und der Wert (in Volt) wahlweise angezeigt.

 

 

Lässt man sich z.B. die Potentialwerte zwischen zwei Elektroden mit 0 V und 100 V berechnen sieht das so aus:

Und jetzt das Raster aus und die Äquipotentiallinien dazu:

 

 

Algorithmus

Der Algorithmus ist folgender: Für jeden Punkt im Raster den Mittelwert der vier Nachbarn bilden (oben/unten/links/rechts). Diese Rechnung muss man wiederholen. Dabei nähern sich die Potentialwerte den echten Werten immer weiter an, bis sie sich schließlich kaum noch ändern (oder sich tatsächlich ein Gleichgewicht eingestellt hat).

Die Potentialwerte der Elektroden sind natürlich fest vorgegeben und ändern sich nicht. Alle anderen Potentialwerte können anfangs z.B. null sein. Wichtig ist nur noch, dass für die nicht vorhandenen Nachbarn an den Rändern der Potentialwert des gegenüberliegenden Nachbars angenommen wird! Dadurch treten die Äquipotentiallinien dann senkrecht aus den Grenzflächen hervor, wie es sich gehört.

 

 

Oben ein Ausschnitt aus dem Kondensator.
Links ein Ausschnitt aus dem L-förmigen Gebilde.
(Beides Beispiele von weiter oben.)

Der grün umrahmte Potentialwert ist der Mittelwert der vier Nachbarn.
An Rändern muss der gegenüberliegende Potentialwert angenommen werden.

 

Äquipotentiallinien

Nachdem die Potentialwerte alle hinreichend genau berechnet sind, können noch Äquipotentiallinien eingezeichnet werden. Das habe ich folgendermaßen implementiert:

  • Maximale Potentialdifferenz wird berechnet
  • Diese wird durch die gewünschte Anzahl an Linien geteilt
  • Für jede Linie:
    1. Das Potential, auf dem die Linie läuft, wird berechnet
    2. Liegt das Potential zwischen den Werten zweier benachbarter Kästchen, wird ein Punkt der Linie (durch lineare Interpolation) berechnet
    3. Der berechnete Punkt wird einer Liste hinzugefügt.
    4. Punkteliste wird sortiert *
    5. Punkteliste wird als Linie gezeichnet (Cubic Spline wäre schön)

* Die Liste kann natürlich auf verschiedene Arten sortiert werden. Die beste Art ist natürlich, die Liste so zu sortieren, dass der Abstand zwischen zwei aufeinanderfolgenden Punkten möglichst gering ist.

Bestimmt gibt es effizientere Verfahren, aber mich hat's schon gefreut, dass es überhaupt so gut funktioniert hat :-)

Hier sieht man die Ergebnisse verschiedener Sortieralgorithmen angewandt auf die Liste der Punkte:


Die Punktelisten hier sind sortiert nach dem x-Wert der Punkte. Darum sind die Linien glatt wo sie etwa horizontal liegen, aber krakelig wo sie steil stehen.


Bei diesen Linien sind die Punktelisten nach dem y-Wert sortiert, was in diesem Fall ein gutes Ergebnis bringt. Aber das liegt an der Form des Gebildes.

 

 


Die Punktelisten dieser Linien sind nicht sortiert, deshalb das Gekrakel.


Sind die Punkte nach minimalem Abstand sortiert erhält man in jedem Fall das schönste Ergebnis.

 

Bedienung

Die Benutzeroberfläche ist zunächst unverständlich und unschön (damals wusste ich noch nicht viel von Swing und Layouts). Aber immerhin gibt es Hints zu den Steuerelementen.

 

Weitere Screenshots

Alle Bilder können übrigens auch in der Originalgröße angezeigt werden (Rechtsklick aufs Bild, "Grafik anzeigen" oder so).


(Komisches Gebilde)


Viele Potentialwerte ringförmig um die Elektrode in der Mitte!

Und hier die Äquipotentiallinien:

 

Download

Wer will, kann das Programm hier herunterladen.

Falls sich jemand wirklich für den Quellcode interessieren sollte, kann er mir gerne schreiben.

Copyright © 2013 Jakob Schöttl  |  2013-12-21