Grafische Differentation
Verfasst: 02.07.2006 20:12
Das is'n sehr unmathematischer Code für'n sehr mathematisches Thema
Eigentlich nur so'n Test, aber ganz lustig und wenn man keine mathematischen, genauen Daten von der Funktion braucht, reichts.
(zum kucken, wie's aussieht und so.)
Eigentlich nur so'n Test, aber ganz lustig und wenn man keine mathematischen, genauen Daten von der Funktion braucht, reichts.
(zum kucken, wie's aussieht und so.)

Code: Alles auswählen
Enumeration
#window
#gadget
#image
EndEnumeration
e.d=Pow(1+1/100000,100000)
Global delta_x.d=1/32,y1.d,y2.d,x1.d,x2.d,x.d
max=256*delta_x
Global Dim f1x.d(514),Dim f2x.d(514)
Global Dim a1x.d(513),Dim a2x.d(513)
Global Dim b1x.d(512),Dim b2x.d(512)
Macro Function(x)
x*x*x-x
EndMacro
x1=-8
For n=0 To 514
x2=x1+delta_x
y1=Function(x1)
y2=Function(x2)
f1x(n)=y1
f2x(n)=y2
x1=x1+delta_x
Next n
For n=0 To 513
a1x(n)=(f2x(n)-f1x(n))/delta_x
a2x(n)=(f2x(n+1)-f1x(n+1))/delta_x
Next n
For n=0 To 512
b1x(n)=(a2x(n)-a1x(n))/delta_x
b2x(n)=(a2x(n+1)-a1x(n+1))/delta_x
Next n
OpenWindow(#window,0,0,512,512,"Grafische Ableitung",#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget)
CreateImage(#image,512,512)
StartDrawing(ImageOutput(#image))
Box(0,0,512,512)
LineXY(0,256,512,256,RGB(255,255,255))
LineXY(256,0,256,512,RGB(255,255,255))
For n=0 To 512
;Funktionsgraph
If (f1x(n)<max And f1x(n)>-max) Or (f1x(n)<max And f2x(n)>max) Or (f1x(n)<-max And f2x(n)>-max) Or (f1x(n)>max And f2x(n)<max) Or (f1x(n)>-max And f2x(n)<-max)
LineXY(n,256-f1x(n)*32,n+1,256-f2x(n)*32,RGB(0,0,255))
EndIf
;Maxima
If (f1x(n)<f1x(n+1) And f1x(n+1)>f1x(n+2)) Or (f1x(n)>f1x(n+1) And f1x(n+1)<f1x(n+2))
DrawingMode(4)
Circle(n+1,256-f1x(n+1)*32,4,RGB(255,0,255))
DrawingMode(0)
EndIf
;Nullstellen
If (Abs(f1x(n))=0 Or (f1x(n)>0 And f2x(n)<0) Or (f1x(n)<0 And f2x(n)>0))
DrawingMode(4)
Circle(n,256,4,RGB(0,255,255))
DrawingMode(0)
EndIf
;1.Ableitung
If (a1x(n)<max And a1x(n)>-max) Or (a1x(n)<max And a2x(n)>max) Or (a1x(n)<-max And a2x(n)>-max) Or (a1x(n)>max And a2x(n)<max) Or (a1x(n)>-max And a2x(n)<-max)
LineXY(n,256-a1x(n)*32,n+1,256-a2x(n)*32,RGB(255,0,0))
EndIf
;2.Ableitung
If (b1x(n)<max And b1x(n)>-max) Or (b1x(n)<max And b2x(n)>max) Or (b1x(n)<-max And b2x(n)>-max) Or (b1x(n)>max And b2x(n)<max) Or (b1x(n)>-max And b2x(n)<-max)
LineXY(n,256-b1x(n)*32,n+1,256-b2x(n)*32,RGB(0,255,0))
EndIf
Next n
DrawText(5,5,"Funktionsgraph",RGB(0,0,255),0)
DrawText(5,21,"1.Ableitung",RGB(255,0,0),0)
DrawText(5,37,"2.Ableitung",RGB(0,255,0),0)
DrawText(5,53,"Maxima",RGB(255,0,255),0)
DrawText(5,69,"Nullstellen",RGB(0,255,255),0)
StopDrawing()
CreateGadgetList(WindowID(#window))
ImageGadget(#gadget,0,0,512,512,ImageID(#image))
Repeat
event=WaitWindowEvent()
Until event=#PB_Event_CloseWindow