pynet
发表于 2007-7-19 18:09:00
<p><strong><font face="Verdana" color="#111111">nArrow是半径还是弦心距呀?</font></strong></p><p><strong><font face="Verdana" color="#111111">能不能把getArrow子函数贴出来呀?</font></strong></p><p><strong><font face="Verdana" color="#111111">谢谢楼主~</font></strong></p>
lysgyx
发表于 2007-11-8 15:13:00
<p>我是用.net写的</p><p>是这样算的 </p><p>Function GetCenterFromBulge(ByVal Ps() As Double, ByVal Pe() As Double, ByVal Bulge As Double) As Double()<br/> '***************************************************<br/> '* 通过圆弧的端点和凸度值解算圆心坐标 *<br/> '***************************************************<br/> Dim DirSE As Double, DistSE As Double, DirC As Double<br/> Dim Radius As Double, Dv As Double, ArcLength As Double<br/> Dim Angle1 As Double, Angle2 As Double<br/> Dim P1(2) As Double, P(2) As Double<br/> If Bulge = 0 Then<br/> P(0) = 0<br/> P(1) = 0<br/> P(2) = 0<br/> Return P<br/> Else<br/> DirSE = Ftn(Pe(0) - Ps(0), Pe(1) - Ps(1)) '解求弦方位<br/> DistSE = Dist(Pe(0) - Ps(0), Pe(1) - Ps(1)) '解求弦长<br/> Dv = Bulge * DistSE / 2 '解求弦高<br/> Radius = Abs(DistSE ^ 2 / Dv / 8 + Dv / 2) '解求圆半径<br/> Angle1 = Atan(Bulge)<br/> Angle2 = PI / 2 - Abs(Angle1) - Abs(Angle1)<br/> DirC = DirSE + Sign(Bulge) * Angle2<br/> P(0) = Ps(0) + Radius * Cos(DirC)<br/> P(1) = Ps(1) + Radius * Sin(DirC)<br/> P(2) = 0<br/> Return P<br/> End If<br/> End Function<br/></p>
zhang小小
发表于 2010-9-7 19:39:00
学习了
liub951030
发表于 2011-1-5 17:27:32
请大侠把代码贴全好吗,这样像我这样的菜鸟也用一下!
3xxx
发表于 2013-9-25 20:41:15
用炸开法最简单。
Sub addarc2d() '起点和终点加凸度法画圆
Dim usarc As AcadArc
Dim pt1 As Variant
Dim pt2 As Variant
Dim pt3 As Variant
Dim points(0 To 3) As Double
pt1 = ThisDrawing.Utility.GetPoint(, "请输入圆弧起点:")
pt2 = ThisDrawing.Utility.GetPoint(pt1, "请输入圆弧终点:")
pt3 = ThisDrawing.Utility.GetReal("请输入圆弧角度:")
points(0) = pt1(0): points(1) = pt1(1)
points(2) = pt2(0): points(3) = pt2(1)
Set plineobj = ThisDrawing.ModelSpace.AddLightWeightPolyline(points)
' ZoomAll
'pt3 = pt3 * 3.1415926535 / 180
'pt3 = Tan(pt3)
plineobj.SetBulge 0, Tan(0.25 * pt3 * 3.1415926535 / 180) '
plineobj.Update
Dim explodedObjects As Variant
explodedObjects = plineobj.Explode
Dim center(0 To 2) As Double
'Dim centerPoint As Variant
centerPoint = explodedObjects(0).center
StartA = explodedObjects(0).StartAngle * (180 / 3.14)
EndA = explodedObjects(0).EndAngle * (180 / 3.14)
End Sub
xchj81
发表于 2014-8-2 22:00:30
有难度。学习学习