我是用.net写的 是这样算的 Function GetCenterFromBulge(ByVal Ps() As Double, ByVal Pe() As Double, ByVal Bulge As Double) As Double() '*************************************************** '* 通过圆弧的端点和凸度值解算圆心坐标 * '*************************************************** Dim DirSE As Double, DistSE As Double, DirC As Double Dim Radius As Double, Dv As Double, ArcLength As Double Dim Angle1 As Double, Angle2 As Double Dim P1(2) As Double, P(2) As Double If Bulge = 0 Then P(0) = 0 P(1) = 0 P(2) = 0 Return P Else DirSE = Ftn(Pe(0) - Ps(0), Pe(1) - Ps(1)) '解求弦方位 DistSE = Dist(Pe(0) - Ps(0), Pe(1) - Ps(1)) '解求弦长 Dv = Bulge * DistSE / 2 '解求弦高 Radius = Abs(DistSE ^ 2 / Dv / 8 + Dv / 2) '解求圆半径 Angle1 = Atan(Bulge) Angle2 = PI / 2 - Abs(Angle1) - Abs(Angle1) DirC = DirSE + Sign(Bulge) * Angle2 P(0) = Ps(0) + Radius * Cos(DirC) P(1) = Ps(1) + Radius * Sin(DirC) P(2) = 0 Return P End If End Function
|