Vielleicht könnt ihr mir helfen.
Hier der Programmcode (die Maus wird in den letzten Programmzeilen angesprochen):
Code: Alles auswählen
InitSprite()
InitMouse()
InitKeyboard()
Global PI.f
PI = 3.14159265
#width = 320
#height = 240
Global raster.b
raster = 2
Global drawRaster.b
drawRaster = 1
Global drawColor.b
drawColor = 1
Global AnzahlLadungen.b
AnzahlLadungen = 3
Dim Ladungen.f(AnzahlLadungen-1, 3-1)
Ladungen(0,0) = 200
Ladungen(0,1) = 150
Ladungen(0,2) = -1
Ladungen(1,0) = 250
Ladungen(1,1) = 30
Ladungen(1,2) = 1
Ladungen(2,0) = 100
Ladungen(2,1) = 100
Ladungen(2,2) = 1
Procedure HSBtoRGB (h.f, s.f, b.f)
If h >= 0 And h < 60/360.0
R = b*255
G = (1-s*(1-(h/(60/360.0))))*b*255
B = (1-s)*b*255
Else
If h >= 60/360.0 And h < 120/360.0
R = (1-s*( (h-(60/360.0))/(60/360.0) ))*b*255
G = b*255
B = (1-s)*b*255
Else
If h >= 120/360.0 And h < 180/360.0
R = (1-s)*b*255
G = b*255
B = (1-s*(1-( (h-2*(60/360.0))/(60/360.0) )))*b*255
Else
If h >= 180/360.0 And h < 240/360.0
R = (1-s)*b*255
G = (1-s*( (h-3*(60/360.0))/(60/360.0) ))*b*255
B = b*255
Else
If h >= 240/360.0 And h < 300/360.0
R = (1-s*(1-( (h-4*(60/360.0))/(60/360.0) )))*b*255
G = (1-s)*b*255
B = b*255
Else
R = b*255
G = (1-s)*b*255
B = (1-s*( (h-5*(60/360.0))/(60/360.0) ))*b*255
EndIf
EndIf
EndIf
EndIf
EndIf
ProcedureReturn RGB(R, G, B)
EndProcedure
Dim Punkt.f(2-1)
Procedure getPoint(x.w, y.w)
XX.f = 0
YY.f = 0
nenner.f
For i=0 To AnzahlLadungen-1
nenner = Pow( Pow( (x-Ladungen(i,0))*(x-Ladungen(i,0))+(y-Ladungen(i,1))*(y-Ladungen(i,1)), 0.5), 3)
If nenner > 0
XX = XX+(Ladungen(i,2)*(x-Ladungen(i,0)))/nenner
YY = YY+(Ladungen(i,2)*(y-Ladungen(i,1)))/nenner
Else
XX = XX+1
YY = YY+1
EndIf
Next
Punkt(0) = Pow(XX*XX+YY*YY, 0.5)
If XX > 0 And YY > 0
Punkt(1) = ATan(YY/XX)
Else
If XX < 0 And YY > 0
Punkt(1) = ATan(YY/XX)+PI
Else
If XX < 0 And YY < 0
Punkt(1) = ATan(YY/XX)+PI
Else
If XX > 0 And YY < 0
Punkt(1) = ATan(YY/XX)+2*PI
Else
If XX > 0 And YY = 0
Punkt(1) = 0
Else
If XX = 0 And YY > 0
Punkt(1) = PI/2
Else
If XX < 0 And YY = 0
Punkt(1) = PI
Else
Punkt(1) = 3*PI/2
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndProcedure
Procedure doit()
If drawRaster = 1
max.f
max = 0.1
direction.f
direction = 0
saturation.f
brightness.f
y = 0
While y < #height
x = 0
While x < #width
getPoint(x, y)
brightness = Pow(Punkt(0)/max, 0.25)
If brightness > 1
brightness = 1
EndIf
If drawColor = 1
direction = Punkt(1)/(2*PI)
saturation = 1
Else
saturation = 0
EndIf
Box(x, y, raster, raster, HSBtoRGB(direction, saturation, brightness))
x=x+raster
Wend
y=y+raster
Wend
EndIf
EndProcedure
OpenScreen(#width, #height, 32, "Felder")
doit()
Repeat
ExamineMouse()
Ladungen(0,0) = MouseX()
Ladungen(0,1) = MouseY()
StartDrawing(ScreenOutput())
doit()
StopDrawing()
FlipBuffers()
ExamineKeyboard()
Until KeyboardPushed(1)
End
Außerdem hab ich das Problem, dass ab und zu der Fensterrahmen oben kurz zu sehen ist.