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;

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