This is in vba but it is the math you want.
[code]
Function MidPtofPolyArc(iSeg As Integer) As Variant
Dim P1 As Variant, P2 As Variant
Dim MidPt(2) As Double
Dim dBulge As Double
Dim Height As Double, Dist As Double
Dim deltaX As Double, deltaY As Double
Dim Slope As Double
Dim dLength As Double
Dim MidArc(2) As Double
P1 = oPline.Coordinate(iSeg)
P2 = oPline.Coordinate(iSeg + 1)
deltaX = P1(0) - P2(0)
deltaY = P1(1) - P2(1)
Dist = Length(P1, P2) / 2
If deltaY >= 0 Then
Dist = -Dist
End If
MidPt(0) = (P1(0) + P2(0)) / 2
MidPt(1) = (P1(1) + P2(1)) / 2
MidPt(2) = oPline.Elevation
dBulge = oPline.GetBulge(iSeg)
Height = dBulge * Dist
If deltaY = 0 Then
MidArc(0) = MidPt(0)
MidArc(1) = MidPt(1) + Height
ElseIf deltaX = 0 Then
MidArc(0) = MidPt(0) + Height
MidArc(1) = MidPt(1)
Else
Slope = deltaY / deltaX
Slope = -1 / Slope 'Invert slope for perpendicular bisector
'X = X1 + distance / dLength * DX
'proving for DeltaX=1 in slope direction
'slope=DeltaY / 1 => DeltaY=slope
dLength = Sqr(Slope ^ 2 + 1)
MidArc(0) = MidPt(0) + (Height / dLength) * 1
MidArc(1) = MidPt(1) + (Height / dLength) * Slope
End If
MidPtofPolyArc = MidArc
End Function
[/code]