'---------
'---- NOTE: Sticking with R A D I A N S as the resulting angles!!
'---------
'---- Check for side one
If blnDebug Then Debug.Print "Side 1"
dblSideA = dblR2
dblSideB = dblR1
dblSideC = Sqr(((dblX1 - dblX2) ^ 2) + ((dblY1 - dblY2) ^ 2))
dblAngleC = ((dblSideA ^ 2) + (dblSideB ^ 2) - (dblSideC ^ 2)) / (2 * dblSideA * dblSideB)
If blnDebug Then
Debug.Print " Side A,B,C : " & dblSideA & " : " & dblSideB & " : " & Format(dblSideC, "#0.000")
' Debug.Print " Before arccos - AngleC : " & dblAngleC
End If
dblAngleC = ArcCosR(dblAngleC)
dblAngleA = ((dblSideA * Sin(dblAngleC)) / dblSideC)
dblAngleA = ArcSinR(dblAngleA)
dblAngleB = DegToRad(180 - RadToDeg(dblAngleC) - RadToDeg(dblAngleA))
If blnDebug Then
Debug.Print " Angles (R) A, B, C : " & Format(dblAngleA, "#0.00") & " : " & Format(dblAngleB, "#0.00") & " : " & Format(dblAngleC, "#0.00")
Debug.Print " Angles (D) A, B, C : " & Format(RadToDeg(dblAngleA), "#0.00") & " : " & Format(RadToDeg(dblAngleB), "#0.00") & " : " & Format(RadToDeg(dblAngleC), "#0.00")
End If
dblExternalAngle = RadToDeg(ArcSinR(dbly1y2Height / dblSideC))
dblTemp = dblExternalAngle + RadToDeg(dblAngleA)
[B] 'you have to check wether Point2 is to the left or right of Point1
If dblX1 <= dblX2 Then
txtResX1.Text = Format((Cos(DegToRad(dblTemp)) * dblR1) + dblX1, "#0.000")
txtResY1.Text = Format((Sin(DegToRad(dblTemp)) * dblR1) + dblY1, "#0.000")
Else
txtResX1.Text = Format(-(Cos(DegToRad(dblTemp)) * dblR1) + dblX1, "#0.000")
txtResY1.Text = Format(-(Sin(DegToRad(dblTemp)) * dblR1) + dblY1, "#0.000")
End If[/B]
'---- Check for side two
If blnDebug Then Debug.Print "Side 2"
dblSideA = dblR1
dblSideB = dblR2
dblSideC = Sqr(((dblX1 - dblX2) ^ 2) + ((dblY1 - dblY2) ^ 2))
dblAngleC = ((dblSideA ^ 2) + (dblSideB ^ 2) - (dblSideC ^ 2)) / (2 * dblSideA * dblSideB)
If blnDebug Then
Debug.Print " Side A,B,C : " & dblSideA & " : " & dblSideB & " : " & Format(dblSideC, "#0.000")
' Debug.Print " Before arccos - AngleC : " & dblAngleC
End If
dblAngleC = ArcCosR(dblAngleC)
dblAngleA = ((dblSideA * Sin(dblAngleC)) / dblSideC)
dblAngleA = ArcSinR(dblAngleA)
dblAngleB = DegToRad(180 - RadToDeg(dblAngleC) - RadToDeg(dblAngleA))
If blnDebug Then
Debug.Print " Angles (R) A, B, C : " & Format(dblAngleA, "#0.00") & " : " & Format(dblAngleB, "#0.00") & " : " & Format(dblAngleC, "#0.00")
Debug.Print " Angles (D) A, B, C : " & Format(RadToDeg(dblAngleA), "#0.00") & " : " & Format(RadToDeg(dblAngleB), "#0.00") & " : " & Format(RadToDeg(dblAngleC), "#0.00")
End If
dblExternalAngle = RadToDeg(ArcSinR(dbly1y2Height / dblSideC))
dblTemp = dblExternalAngle + RadToDeg(dblAngleA)
[B] If dblX1 <= dblX2 Then
txtResX2.Text = Format(dblX2 - (Cos(DegToRad(dblTemp)) * dblR2), "#0.000")
txtResY2.Text = Format(dblY2 - (Sin(DegToRad(dblTemp)) * dblR2), "#0.000")
Else
txtResX2.Text = Format(dblX2 + (Cos(DegToRad(dblTemp)) * dblR2), "#0.000")
txtResY2.Text = Format(dblY2 + (Sin(DegToRad(dblTemp)) * dblR2), "#0.000")
End If
[/B]
If Err.Number <> 0 Then
MsgBox "Error : " & Err.Number & vbCrLf & Err.Description, vbOKOnly + vbInformation, "Error"
txtResX1.Text = ""
txtResY1.Text = ""
txtResX2.Text = ""
txtResY2.Text = ""
lblresult.Caption = "Error"
Else
lblresult.Caption = "Complete"
End If
End Sub