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

有难度。学习学习
页: 1 [2]
查看完整版本: 有凸度的多段线问题