Code: Alles auswählen
;- Grafische Darstellung der Grund-Winkelfunktionen
;- "Helle" Klaus Helbing, 22.12.2007, PB4.10
OpenWindow(0,0,0,900,600,"Winkelfunktionen",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(0))
ImageGadget (0, 0, 0, 900, 600, 0)
EndIf
CreateImage(0, 900, 600, #PB_Image_DisplayFormat)
X1.d=210 ;Ausgangswert Peripherie-Punkt
Y1.d=300
XT=110
YT=300
XCT=110
YCT=300
KF.d=0.5*#PI/0.9 ;Korrekturfaktor Abzisse
Repeat
Event=WaitWindowEvent()
StartDrawing(ImageOutput(0))
Box(0,0,900,800,RGB(255,255,255))
DrawingMode(#PB_2DDrawing_Outlined)
P1YK.d=300
P1XK.d=110
For i=0 To 359
P2YK.d=300-Sin(i/180*#PI)*100
P2XK.d=110+Cos(i/180*#PI)*100
LineXY(P1XK,P1YK,P2XK,P2YK,0) ;"Einheitskreis", Circle ist nicht deckungsgleich mit
; Bogenmass unten!
P1XK=P2XK
P1YK=P2YK
Next
;Circle(110,300,100,0) ;"Einheitskreis"
LineXY(0,300,220,300,0) ;X-Achse des Kreises
LineXY(110,410,110,190,0) ;Y-Achse des Kreises
LineXY(240,300,880,300,0) ;Abzisse
LineXY(250,580,250,20,0) ;Ordinate
LineXY(210,580,210,20,0) ;Kreis-Tangente
LineXY(350,292,350,308,0) ;X=1
LineXY(450,292,450,308,0) ;X=2
LineXY(550,292,550,308,0) ;X=3
LineXY(650,292,650,308,0) ;X=4
LineXY(750,292,750,308,0) ;X=5
LineXY(850,292,850,308,0) ;X=6
LineXY(407,292,407,308,0) ;1/2Pi
LineXY(564,292,564,308,0) ;Pi
LineXY(721,292,721,308,0) ;3/2Pi
LineXY(878,292,878,308,0) ;2Pi
LineXY(242,200,258,200,0) ;Y=1
LineXY(202,200,218,200,0) ;Kreis-Tangente=1
LineXY(242,100,258,100,0) ;Y=2
LineXY(202,100,218,100,0) ;Kreis-Tangente=2
LineXY(242,400,258,400,0) ;Y=-1
LineXY(202,400,218,400,0) ;Kreis-Tangente=-1
LineXY(242,500,258,500,0) ;Y=-2
LineXY(202,500,218,500,0) ;Kreis-Tangente=-2
DrawText(890,292,"X")
DrawText(246,0,"Y")
DrawText(225,293,"0°")
DrawText(102,180,"90°")
DrawText(100,410,"270°")
DrawText(346,305,"1") ;X=1
DrawText(446,305,"2") ;X=2
DrawText(546,305,"3") ;X=3
DrawText(646,305,"4") ;X=4
DrawText(746,305,"5") ;X=5
DrawText(846,305,"6") ;X=6
DrawText(400,305,"1/2Pi") ;Pi/2
DrawText(560,305,"Pi") ;Pi
DrawText(705,305,"3/2Pi") ;3/2Pi
DrawText(870,305,"2Pi") ;2Pi
DrawText(228,192,"1") ;Y=1
DrawText(228,92,"2") ;Y=2
DrawText(225,392,"-1") ;Y=-1
DrawText(225,492,"-2") ;Y=-2
LineXY(10,20,50,20,RGB(0,255,0)) ;Grün=Sinus
DrawText(60,12,"= Sinus")
LineXY(10,40,50,40,RGB(255,0,0)) ;Rot=Cosinus
DrawText(60,32,"= Cosinus")
LineXY(10,60,50,60,RGB(0,0,255)) ;Blau=Tangens
DrawText(60,52,"= Tangens")
LineXY(10,80,50,80,RGB(255,192,0)) ;Gelb=Cotangens
DrawText(60,72,"= Cotangens")
LineXY(10,100,50,100,RGB(255,0,255)) ;Pink=Bogenmass
DrawText(60,92,"= Bogenmass")
DrawingMode(#PB_2DDrawing_Default)
Circle(X1,Y1,4,RGB(255,0,255)) ;Peripherie-Punkt
X.d=WindowMouseX(0)
Y.d=WindowMouseY(0)
If X>=10 And X<=210 And Y>=200 And Y<=400
X1=X
Y1=Y
T.d=(300-Y)/(X-110)
AT.d=ATan(T)
X2.d=Cos(AT)*100
Y2.d=Sin(AT)*100
If X>=110 And Y<=300 ;1.Quadrant
Winkel.d=ATan(T)*180/#PI
X1=110+X2
Y1=300-Y2
XT=110
YT=300
XCT=110
YCT=300
Sig=1
EndIf
If X<110 And Y<=300 ;2.Quadrant
Winkel.d=180+ATan(T)*180/#PI
X1=110-X2
Y1=300+Y2
XT=X1
YT=Y1
XCT=110+Y2
YCT=300-X2
Sig=-1
EndIf
If X<110 And Y>300 ;3.Quadrant
Winkel.d=180+ATan(T)*180/#PI
X1=110-X2
Y1=300+Y2
XT=X1
YT=Y1
XCT=110-Y2
YCT=300+X2
Sig=-1
EndIf
If X>=110 And Y>300 ;4.Quadrant
Winkel.d=360+ATan(T)*180/#PI
X1=110+X2
Y1=300-Y2
XT=110
YT=300
XCT=110
YCT=300
Sig=1
EndIf
Circle(X1,Y1,4,RGB(255,0,255))
S.d=Sin(AT)*Sig
C.d=Cos(AT)*Sig
CT.d=1/T
B.d=Winkel/180*#PI
EndIf
DrawText(10,450,"Winkel = "+StrD(Winkel)+"°",RGB(255,0,255)) ;Aktueller Winkel
DrawText(10,470,"Bogenmass = "+StrD(B),RGB(255,0,255))
DrawText(10,490,"Sinus = "+StrD(S),RGB(0,255,0))
DrawText(10,510,"Cosinus = "+StrD(C),RGB(255,0,0))
DrawText(10,530,"Tangens = "+StrD(T),RGB(0,0,255))
DrawText(10,550,"Cotangens = "+StrD(CT),RGB(255,192,0))
LineXY(X1,300,X1,Y1,RGB(0,255,0)) ;Sinus
LineXY(110,Y1,X1,Y1,RGB(255,0,0)) ;Cosinus
LineXY(XT,YT,210,300-100*T,RGB(0,0,255)) ;Tangens
LineXY(XCT,YCT,210,300-100*CT,RGB(255,192,0)) ;Cotangens
;- Startwerte Sinus
P1XS.d=250/KF
P1YS.d=300
P2XS.d=250/KF
;- Startwerte Cosinus
P1XC.d=P1XS
P1YC.d=200
P2XC.d=250/KF
;- Startwerte Tangens
P1XT.d=250/KF
P1YT.d=300
P2XT.d=250/KF
;- Startwerte Cotangens
P1XCT.d=250/KF
P1YCT.d=300
P2XCT.d=250/KF
;- Startwerte Bogenmass am Kreis
P1XB.d=210
P1YB.d=300
For i=0 To Winkel
P2YS.d=300-(Sin(i/180*#PI))*100
P2XS+1
LineXY(P1XS*KF,P1YS,P2XS*KF,P2YS,RGB(0,255,0)) ;Sinus
P1XS=P2XS
P1YS=P2YS
P2YC.d=300-(Cos(i/180*#PI))*100
P2XC+1
LineXY(P1XC*KF,P1YC,P2XC*KF,P2YC,RGB(255,0,0)) ;Cosinus
P1XC=P2XC
P1YC=P2YC
P2YT.d=300-(Tan(i/180*#PI))*100
P2XT+1
LineXY(P1XT*KF,P1YT,P2XT*KF,P2YT,RGB(0,0,255)) ;Tangens
P1XT=P2XT
P1YT=P2YT
P2YCT.d=300-(1/(Tan(i/180*#PI))*100)
P2XCT+1
LineXY(P1XCT*KF,P1YCT,P2XCT*KF,P2YCT,RGB(255,192,0)) ;Cotangens
P1XCT=P2XCT
P1YCT=P2YCT
P2YB.d=300-Sin(i/180*#PI)*100
P2XB.d=110+Cos(i/180*#PI)*100
LineXY(P1XB,P1YB,P2XB,P2YB,RGB(255,0,255)) ;Bogenmass am Kreis
P1XB=P2XB
P1YB=P2YB
Next
LineXY(250,300,250+B*100,300,RGB(255,0,255)) ;Bogenmass auf Abzisse
StopDrawing()
SetGadgetState(0,ImageID(0))
Until Event=#PB_Event_CloseWindow
Helle
Edit: Vorzeichen korrigiert
Edit: 22.12.2007 Bogenmass hinzugefügt