Gravitation V1

Vorstellungen von Programmen, welche mit Lazarus erstellt wurden.
Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Gravitation V1

Beitrag von Euklid »

Hallo Leute!

Wie schon angekündigt, schreibe ich im Moment gerade an einem Programm zur Darstellung von Gravitationspotentialen.

Hier bin ich nun an eine Stelle gekommen, an der ich vom Programmiertechnischen nicht mehr weiter weiß. Vielleicht könnt ihr mir ja helfen?

Zunächst muss ich mal beschreiben, was das Programm genau machen soll; dann beschreibe ich, was es macht:

Es soll:
1. Das Potential durch Farbverläufe auf der Form1.Image1.Canvas darstellen. Dazu
2. erstellte ich ein array Gravi.FPixPot[x,y], das genauso groß ist, wie das Image1, und in dem das Potential bei Punkt (x,y) gespeichert wird.
3. Der Quelltextausschnitt unten zeigt dann den Teil des Programmes, der dieses array über Form1.Canvas.Pixels[x,y] in einen Farbwert umwandelt.

- bis hierhin klappt alles wunderbar -

Um keine Probleme mit Punktmassen zu bekommen, wird das array Gravi.FPixPot := 0 gesetzt, wenn sich der darzustellende Punkt innerhalb des Himmelskörpers befindet.
Der genannte (und nun folgende) Quelltextausschnitt soll überall dort, wo GraviFPixPot[x.y]=0 ist, die Farbe rgb(0,255,255) malen. Und gerade das macht er nicht!


Hier der Quelltext:

Code: Alles auswählen

If PotentialMin<>0 then DarstSchrittWeite:=(ln(PotentialMax)-ln(PotentialMin))/(255);
 
 
    //Zeichnen:
    for x:=1 to Gravi.FXbis do
     for y:=1 to Gravi.FYbis do
     begin
       rot:=0; gruen:=0; blau:=0;
       If Gravi.FPixPot[x,y]<>0 then
       begin
         // roter Farbverlauf für Gravi.FPixPot<>0:
         If PotentialMin<>0 then rot:=trunc((ln(Gravi.FPixPot[x,y])-ln(PotentialMin))/DarstSchrittWeite);
 
         If rot<0 then rot:=0;
         If rot>255 then rot:=255;
       end else
       begin
         // rgb(0,255,255) für Gravi.FPixPot=0
         blau:=255; gruen:=255;
       end;
       Image1.Canvas.Pixels[x,y]:=rgb(rot,gruen,blau);
     end;
Hier ein Bildschirmphoto (Gravitationspotential der Sonne):

Bild

Der ROTE Farbverlauf wird genauso dargestellt, wir erhofft.
In der dritten Spalte der Statusbar wird der zur Position des Mauszeigers gehörende Wert für Gravi.FPixPot ausgegeben. Auf dem Bildschirmphoto war der Mauszeiger direkt über der Sonne; dass hier Gravi.FPixPot=0 ist liegt also daran, dass die zur Mauszeiger gehörende Position innerhalb der Sonne liegt.

Nur nach obigem Quelltext müsste hier doch der Farbwert bei rgb(0,255,255) liegen, da Gravi.FPixPot=0, oder? Ich verstehe das nicht.

Wäre froh, wenn mir hier jemand einen Tipp geben könnte, was ich falsch gemacht habe. Danke schonmal!

Euklid

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Warum benutzt du nicht den debugger ? Damit sollte sich das problem recht schnell finden lassen. Du kannst auch mal versuchen die daten bei der berechnung auf den canvas oder in ein bitmap zu schreiben dann brauchst das riesige speicherfressende array nicht mehr.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

Gut. Habe debuggt, mit folgendem Ergebnis:
Es wird der Wert rgb(0,255,255) an Image1.Canvas.Pixels[x,y] für einige x,y (die im Sichtbereich liegen) übergeben. Mehr weiß ich leider auch nicht.
Nur er scheint den Pixel nicht zu zeichen....?

Mit dem Feld rechne ich rum.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Setz doch den pixel mal auf clAqua also ohne rgb ?!
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

Juhu! Es funktioniert!

Dein Tipp mit clyellow hats gebracht, danke!

Habe wohl in die rgb-Funktion Fehler eingebaut.

Wenn Gravitation fertig ist, werde ich hier für diejenigen, die sich dafür interessieren eine Version für Linux, Windows und den Quelltext veröffentlichen.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Juhu ich wollt schon immer wissen was passiert wenn ich in meinem wohnzimmer ein schwarzes loch erzeuge.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

... nur hoffentlich nicht unterm Weihnachtsbaum, sonst sind alle Geschenke weg! :shock:

Benutzeravatar
theo
Beiträge: 10859
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Christian hat geschrieben:Juhu ich wollt schon immer wissen was passiert wenn ich in meinem wohnzimmer ein schwarzes loch erzeuge.
Also ich hab ein paar solche im Sofa von heruntergefallenen Zigaretten.
Hat irgendwie auch mit Gravitation zu tun, aber ausser hässlich aussehen tut's eigentlich nichts. ;-)

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

Solange die Personen nicht verschwinden, die sich auf Sofa setzen...

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Och kommt auf die Personen an ...
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Verformt sich da nicht das Sofa und sieht eher aus wie hochschwangere Harfe?

Ich hab da immer Dhali's Uhren im Hinterkopf.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Wie sieht denn ne hochschwangere Harfe aus ?
Aber ich denke n schwarzes Loch hat seinen namen nich ganz zu unrecht auch wenn er nicht so einfallsreich wie viele Namen heutzutage ist.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

Hallo Leute!

Gravitation ist in seiner ersten Version nun fertig! Habe mit ersten HTML-Versuchen eine Projektseite dazu errichtet:

http://www.projekt-gravitation.de.ki" onclick="window.open(this.href);return false;

Hier lassen sich Versionen für Linux, Windows sowie der Quelltext downloaden. Das alles unter der Gnu Gpl, für die, die den Quelltext für andere Zwecke einsetzen möchten.

Schreibt mal, was ihr meint!

Viele Grüße, Euklid

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Ich weis zwar nicht wirklich vollends, was ich da eigentlich berechne, aber nun gut.

Ein zwei Kleinigkeiten sind mir aber aufgefallen, kann eventuell am Crosscompilieren liegen (?) aber ich sehe keinerlei Umlaute. Sowohl in der Linzenz beispielsweise, als auch in den Labels und anderen Komponenten. Stattdessen unverständliche Zeichenkomnbinationen, oder du sagst mir, was das für ne Sprache ist ;):

Code: Alles auswählen

//Als Beispiel:
Nun zunächst die inoffizielle deutsche Übersetzung der GNU GPL V2, danach das rechtskräftige englischsprachige Original
Scrollbalken in der Lizenz wären nett, ist ne Feinheit, sieht aber ohne putzig aus.

Bei Nildspeichern, sollte unbedingt ein Dateifilter angegeben werden, woher weis ich den, das das Programm bmp speichert und nicht beispielsweise png?

Ebenso könnte man bei Speichern auch ne eigene Dateiendung vorschlagen, würde auch die Dateizuordnung vereinfachen, als die Option alle Dateien.

Geschmacksache, aber ein poMainFormCenter der Forms wäre vielleicht ganz nett, da sie scheinbar ja als poDesign recht verstreut beim öffnen erscheinen. Mit ersterer Option werden sie halt immer in der Mitte des Mein-Formulars geöffnet.

So, das waren meine ersten Änderungs/Verbesserungsvorschläge, vielleicht setzt du den ein oder anderen ja um.

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

Hallo monta!

Danke für deine Bemerkungen!
monta hat geschrieben:Ich weis zwar nicht wirklich vollends, was ich da eigentlich berechne, aber nun gut.
Das Programm berechnet das Gravitationspotential sowie das gravitative Kraftfeld. Letzteres ist leicht zu erklären:
Massen ziehen sich ja an (deshalb bleiben wir auf der Erde, und die Erde um die Sonne). Nun kann man beispielsweise das Sonnensystem eingeben, und schauen, welche Kraft auf ein Raumschiff wirkt, das sich irgendwo befindet. Über Äquipotentiallinien kann man schließlich genauere Untersuchungen anstellen...

Gravitationspotential = Potentielle Energie. Im anderen Fall wird die dann graphisch dargestellt.

Zugegebenermaßen mag ein bisschen abstakt klingen. In der Schule aber, hoffe ich, kann man das Programm aber in Klasse 11 etwa einsetzen, um den Feld- oder den Potentialbegriff zu verdeutlichen.
Ein zwei Kleinigkeiten sind mir aber aufgefallen, kann eventuell am Crosscompilieren liegen (?) aber ich sehe keinerlei Umlaute. Sowohl in der Linzenz beispielsweise, als auch in den Labels und anderen Komponenten. Stattdessen unverständliche Zeichenkomnbinationen, oder du sagst mir, was das für ne Sprache ist ;):

Code: Alles auswählen

//Als Beispiel:
Nun zunächst die inoffizielle deutsche Übersetzung der GNU GPL V2, danach das rechtskräftige englischsprachige Original
Ja, das ist mir auch schon aufgefallen. Notwendigenfalls muss ich die Umlaute in der Windows-Version ersetzen durch andere Zeichen. Mal schaun, ob ichs aus anders hinkrieg. Glaube das liegt daran, dass er unter Linux andere Zeichen für die Umlaute verwendet als unter Windows. Wenn da vielleicht hier jemand eine Lösung kennt?
Scrollbalken in der Lizenz wären nett, ist ne Feinheit, sieht aber ohne putzig aus.
Normalerweise sollte er Scrollbalken zeichen. Ansonsten könnte man die Lizenz ja garnicht lesen? Zeichnet er sie bei dir nicht?
Bei Nildspeichern, sollte unbedingt ein Dateifilter angegeben werden, woher weis ich den, das das Programm bmp speichert und nicht beispielsweise png?
Das war sogar geplant. Hatte ich auf Anhieb nicht hinbekommen. Momentan erkennt er das Bildformat an der Dateinamenserweiterung, die man eingibt. Wenn er eine Erweiterung nicht kennt, speichert er das Bild als Bitmap.
Hier hat Linux wirklich Vorteile: Dem sind die Endungen relativ Wurst ;)
Werde dieses Problem auf jeden Fall in einer der nächsten Versionen angehen.
Geschmacksache, aber ein poMainFormCenter der Forms wäre vielleicht ganz nett, da sie scheinbar ja als poDesign recht verstreut beim öffnen erscheinen. Mit ersterer Option werden sie halt immer in der Mitte des Mein-Formulars geöffnet.
Das ist auch ein guter Vorschlag! Wird in der nächsten Version umgesetzt...
So, das waren meine ersten Änderungs/Verbesserungsvorschläge, vielleicht setzt du den ein oder anderen ja um.
Jo, dann mal vielen Dank für die konstruktive Kritik!

Euklid

Antworten