Segment cirkel

Wiskunde is niet alleen een vak op school. Kom je ergens in de praktijk (bijvoorbeeld tijdens je werk) een wiskundig probleem tegen dan kun je hier om hulp vragen.
Plaats reactie
DenTonny
Nieuw lid
Nieuw lid
Berichten: 2
Lid geworden op: 13 sep 2022, 13:02

Segment cirkel

Bericht door DenTonny » 13 sep 2022, 13:22

Goedemiddag,

Aangezien ikzelf geen wiskundige knobbel ben, kom ik hier even te raden.

Ik heb op mijn werk een programma om de hoogte van een cirkelsegment te bereken, alsook de radius. In dit programma vul ik de booglengte van het cirkelsegment in en de basislengte. Daarna doet dit programma de rest.

Maar dit wil zeggen dat ik steeds 2 programma's moeten openen om uiteindelijk dit resultaat te krijgen. Mijn productieprogramma waar ik de booglengte van het cirkelsegment en de basislengte mee kan bepalen. En daarna dan het andere programma waar ik de hoogte van het cirkelsegment en de radius kan bepalen.
Graag zou ik nu dat 2de programma mee in het eerste willen integreren.

Maar zoals eerder gezegd, ben ik dus geen wiskundige knobbel en weet ik totaal niet hoe ik aan die waarde kom.

Als ik een voorbeeld kan geven (in bijlage tekening met verduidelijking aanduiding):

Deze 2 waarden krijg ik uit mijn productieprogramma
Booglengte (s) = 3449
Basislengte (a) = 3218

Deze 2 waarden krijg ik uit een extern programma
Hoogte (h) = 534
Radius (R) = 2693

Maar hoe komen ze nu aan de waarden van Hoogte (h) en Radius (R) met enkel de Booglengte (s) en Basislengte (a). Welke wiskundige formules zitten hier achter.

Hopelijk kunnen jullie mij hierin helpen.

Alvast bedankt.

arie
Moderator
Moderator
Berichten: 3911
Lid geworden op: 09 mei 2008, 09:19

Re: Segment cirkel

Bericht door arie » 13 sep 2022, 16:14

Afbeelding

Gegeven:
s = boog ASB
a = basis AB

Gevraagd:
h = SC
R = AM = SM = BM

Definieer:
\(\theta = \angle AMB\) (\(\theta\) uitgedrukt in radialen, dus niet in graden)
dan is
\(s =\theta R\)

Uit rechthoekige driehoek BCM halen we:
\(\sin \left(\frac{\theta}{2} \right) = \frac{a/2}{R} = \frac{a}{2R}\)
dus
\(\theta = 2\; \text{asin}\left(\frac{a}{2R} \right)\)

Uit deze 2 formules volgt:
\(s = \theta R = 2R\; \text{asin}\left(\frac{a}{2R} \right)\)

Het probleem is dat we hieruit de straal R niet kunnen isoleren als functie van s en a.
Dit zal numeriek (= via benadering) moeten.
In veel rekenpakketten en en calculators kan je hiervoor de functie SOLVE gebruiken:

definieer eerst de functie
\(S(R) = 2R\; \text{asin}\left(\frac{a}{2R} \right)\)
en zoek de R waarvoor S(R) gelijk is aan de gegeven booglengte s:
S(R) = s
ofwel, zoek de R waarvoor
S(R) - s = 0
en dit laatste kan met de SOLVE functie.
Vaak heb je dan ook een ondergrens van R nodig, in ons geval a/2,
en een bovengrens van R, in ons geval oneindig (= een voldoende groot getal in computer-termen).


Voorbeeld:
s=3449
a=3218
S(R) = 2*R*asin(a/(2*R))
R = solve(R=a/2, 1000000, S(R) - s)
geeft
R = 2692.6039709915345
(mijn solve-functie vraagt eerst de ondergrens, dan de bovengrens, dan het functievoorschrift)

Via de stelling van Pythagoras in driehoek BCM berekenen we tenslotte h:
\((R-h)^2 + (a/2)^2 = R^2\)
\((R-h)^2 = R^2 - (a/2)^2\)
\(R-h = \sqrt{R^2 - (a/2)^2}\) (want \(R-h \ge 0\))
\(h = R-\sqrt{R^2 - (a/2)^2}\)
Met de R die we hierboven gevonden hebben en de bekende a levert dit:
h = 533.6145906101996

arie
Moderator
Moderator
Berichten: 3911
Lid geworden op: 09 mei 2008, 09:19

Re: Segment cirkel

Bericht door arie » 14 sep 2022, 09:24

PS:
Mocht je programmapakket geen SOLVE functie hebben, dan is het in dit geval niet moeilijk om deze zelf te bouwen. Hier de code:

Code: Selecteer alles

\\ bepaal booglengte s als functie van straal r en basis a:
S(r, a)={ 
return( 2.0*r*asin(a/(2*r)) );
}

\\ bepaal segmenthoogte h als functie van straal r en basis a:
H(r, a)={
return( r - sqrt(r^2-(a/2)^2) );
}

\\ bepaal straal r als functie van booglengte s en basis a:
sa2r(s, a)={
rlo = a/2;
rhi = 1000*a;

for(i=1, 60,
  rmid = (rlo+rhi)/2.0;
  smid = S(rmid, a);
  if(smid < s,
    rhi=rmid;
    , \\ else:
    rlo=rmid;
    );
  );
return((rlo+rhi)/2);
}

\\ MAIN PROGRAM:
{
s=3449;
a=3218;
R = sa2r(s, a);
h = H(R, a);
print("R ~= ", R);
print("h ~= ", h);
}
De functie sa2r(s, a) start met een te kleine (rlo) en te grote (rhi) benadering van straal R,
dan bepaalt het herhaald (i=1..60) het gemiddelde rmid van rlo en rhi,
berekent het de booglengte smid bij de gegeven rmid,
en als deze smid kleiner is dan de gevraagde s moeten we R verder zoeken in het interval rlo..rmid,
anders in het interval rmid..rhi.
Elke herhaling (i) zorgt voor een halvering van het interval rlo..rhi, per 10 herhalingen levert dat (1/2)^10 ~= 1/1000 van het oorspronkelijke interval, ofwel een 3 cijfers nauwkeuriger benadering van R.
Met 60 herhalingen zal je waarschijnlijk voldoende nauwkeurig uitkomen.

DenTonny
Nieuw lid
Nieuw lid
Berichten: 2
Lid geworden op: 13 sep 2022, 13:02

Re: Segment cirkel

Bericht door DenTonny » 14 sep 2022, 14:30

Beste Ari,

Heel hartelijk dank voor jou oplossing. Hier kan ik absoluut mee verder.

Gr

Plaats reactie