Seite 1 von 1

Kreise....

Verfasst: 13.08.2015 15:33
von Purebasium
Ich hab ein kleines Berechnungsproblem und ich hab dazu auf Google nix gefunden:

Ich hab einen Kreis mit einem Radius R und eine Linie Q die den Kreis schneidet. (D.h. sie verbindet zwei Punkte, die sich auf dem kreis befinden)
Außerdem hab ich die Linie Z die eine mittelsenkrechte zu Q ist.

Bild:
https://www.dropbox.com/s/csj1fz9klkxkl ... s.png?dl=0


Wenn nur die Länge von Q und Z hab, wie kann ich dann den Radius berechnen?

Re: Kreise....

Verfasst: 13.08.2015 16:21
von alter Mann
Satz des Pythagoras :

Code: Alles auswählen

r² = x²+(r-z)²  -> r² = x²+r²-2rz+z² -> 2rz = x²+z² 
    (x²+z²)
r = -------
     (2z)
falls ich nicht irgendwas übersehen habe :)

(edit: so nun sieht es besser aus :lol: )

Re: Kreise....

Verfasst: 14.08.2015 10:41
von Lord
Schade, daß das Bild zu dem Problem nicht mehr vorhanden ist.
Darin enthalten sein müßte die Info, woher x aus der Lösung
stammt.
So läßt sich weder das ursprungliche Problem lösen, noch der
Lösungsweg nachvollziehen.

Re: Kreise....

Verfasst: 14.08.2015 11:42
von alter Mann
hab nur dieses Bild gefunden Bild

bei Purebasium ist

Code: Alles auswählen

x = Q/2
sonst

Code: Alles auswählen

Bild      |   Purebasium
--------------------------
s         |     Q
a         |     z

Re: Kreise....

Verfasst: 15.08.2015 15:40
von Lord
Hallo alter Mann,
danke für die Informationen!

Zur Visualisierung ein kleines Programm:

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

Re: Kreise....

Verfasst: 17.08.2015 11:49
von Lord
Hallo!

Ich habe meinen obigen Code noch etwas
informativer gestaltet.

Re: Kreise....

Verfasst: 17.08.2015 21:31
von alter Mann
:allright: