Code: Alles auswählen
EnableExplicit
Global y0=64
Global x0=320
Procedure Regler()
;*****************************************************
;* Rechenweg:
;* r² =(s/2)²+(r-h)²
;* r² =(s/2)²+(r-h)(r-h)
;* r² =(s/2)²+r²-2rh+h²
;* 2rh=(s/2)²+h²
;*
;* (s/2)²+h²
;* r =---------
;* 2h
;*****************************************************
;Diese Werte können nur ganzzahlig sein
Protected Hoehe.i, Sehne.i
Protected z.i, z1.i, Nenner.i
; Wegen Divison Bruchzahlen möglich
Protected x.f, x1.f, Zaehler.f, Radius.f
; Höhenänderung (Sehnenverschiebung) entsprechend der Reglerbewegung
Hoehe=257-GetGadgetState(2)
; Länge der Sehne
Sehne=GetGadgetState(3)
;Darstellung der eingestellten Werte unterhalb der Regler
SetGadgetText(21, "h="+Hoehe)
SetGadgetText(31, "s="+Sehne)
;{ Berechnung Radius
x=Sehne/2
z=Hoehe
x1=x*x
z1=z*z
Zaehler=x1+z1
Nenner=2*z
Radius=Zaehler/Nenner
;}
;{ alternativ: zusammengfaßte Berechnung Radius
; Radius=((Sehne/2*Sehne/2)+(Hoehe*Hoehe))/(2*Hoehe);
;}
SetGadgetText(41, "r = "+StrF(Radius,1))
StartDrawing(CanvasOutput(1))
; Zeichenfläche leeren
Box(0, 0, 640, 640, $FFFFFF)
; Sehne
LineXY(x0-x, y0+Hoehe, x0+x, y0+Hoehe, $00C000)
; Radius
LineXY(x0, y0+Hoehe, x0, y0+Radius, $000000)
LineXY(x0, y0+Radius, x0+x, y0+Hoehe, $000000)
; Mittelsenkrechte
LineXY(x0, y0, x0, y0+Hoehe, $FF0000)
; errechneter Kreis
DrawingMode(#PB_2DDrawing_Outlined )
Circle(x0, y0+Radius, Radius, $0000FF)
; Informationen
DrawingMode(#PB_2DDrawing_Transparent )
DrawText( 20, 10, "s = Sehne", $00C000, $FFFFFF)
DrawText( 20, 24, "h = Mittelsenkrechte auf Sehne", $FF0000, $FFFFFF)
DrawText( 20, 38, "r = Radius", $00000, $FFFFFF)
DrawText(540, 20, "h² + (s/2)²", $000000, $FFFFFF)
DrawText(520, 30, "r = ---------------", $000000, $FFFFFF)
DrawText(550, 40, "2 * h", $000000, $FFFFFF)
StopDrawing()
EndProcedure
;
OpenWindow(1, 10, 10, 768, 640, "")
CanvasGadget(1, 0, 0, 640, 640)
TrackBarGadget(2, 640+24, y0, 32, 256, 1, 256, #PB_TrackBar_Vertical)
SetGadgetState(2, 1)
TextGadget(21, 640+24, y0+256+8, 32, 18, Str(GetGadgetState(2)),#PB_Text_Center)
SetGadgetColor(21, #PB_Gadget_FrontColor, $FF0000)
TrackBarGadget(3, 640+32+32+16, y0, 32, 512, 1, 512, #PB_TrackBar_Vertical)
SetGadgetState(3, 512)
TextGadget(31, 640+32+32+16, y0+512+8, 32, 18,Str(GetGadgetState(3)),#PB_Text_Center)
SetGadgetColor(31, #PB_Gadget_FrontColor, $00C000)
TextGadget(41, 640, 32, 128, 18, "", #PB_Text_Center)
Regler()
Define Quit=#False
Define Event=#False
Repeat
Event=WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case 2
Regler()
Case 3
Regler()
EndSelect
Case #PB_Event_CloseWindow
Quit=#True
EndSelect
Until Quit=#True