Esatto.
Non mi sono innervosito; volevo essere chiaro. Quale miglior modo?
giammaria ha scritto:Per i moderatori: si può evitare di vedere la parentesi, per esempio in $arcsin (x/r)$ ? Se la tolgo, risulta diviso per $r$ l'intero arcoseno.
Public Function CalcDist(R1 As Double, R2 As Double, Area As Double) As Double
Dim OldStep As Double
Dim Q1 As Double
Dim Q2 As Double
Dim D As Double
Dim R1q As Double
Dim R2q As Double
Dim CurStep As Double
Dim NewStep As Double
Dim TempArea As Double
R1q = R1 * R1
R2q = R2 * R2
NewStep = 1
Do
OldStep = CurStep
CurStep = NewStep
D = R1 + R2 - CurStep
Q1 = (R1q + D ^ 2 - R2q) / (2 * R1 * D)
Q2 = (R2q + D ^ 2 - R1q) / (2 * R2 * D)
TempArea = ArcCos(Q1) * R1q + ArcCos(Q2) * R2q - D * R1 * Sqr(1 - Q1 ^ 2)
NewStep = CurStep * 2
Loop While TempArea < Area
Do
CurStep = OldStep + (NewStep - OldStep) / 2
D = R1 + R2 - CurStep
Q1 = (R1q + D ^ 2 - R2q) / (2 * R1 * D)
Q2 = (R2q + D ^ 2 - R1q) / (2 * R2 * D)
TempArea = ArcCos(Q1) * R1q + ArcCos(Q2) * R2q - D * R1 * Sqr(1 - Q1 ^ 2)
If TempArea > Area Then
NewStep = CurStep
ElseIf TempArea < Area Then
OldStep = CurStep
Else
Exit Do
End If
Loop While (NewStep - OldStep) > 0.001
CalcDist = CurStep
End Function
Non sbagli, ma non sono calcoli difficili: si ha $L=r-sqrt(r^2-x^2)+R-sqrt(R^2-x^2)$robertom ha scritto: se non ho capito male hai relazionato l'area alla semicorda, quindi devi poi fare altri calcoli per determinare la L, correggimi se sbaglio.