020集——CAD中判断弧是优弧还是劣弧——vba代码实现

         CAD中的弧有优弧(大于180度)和劣弧(小于180度)之分,通过代码可判断弧为优弧还是劣弧。

        逻辑思路如下,假设cad模型空间已有一弧对象arc,根据arc.startpoint和arc.endpoint方法可获取弧的起点和终点坐标,arc.center可获取弧的圆心坐标。

        下面开始用到数学公式(向量公式 ):

        假设两个向量的夹角a,那么cos(a) = 向量点积/向量的模(长度)        

向量点积公式

向量点积公式是a·b=|a||b|cos<u,v>,其中a和b是向量,|a|和|b|分别表示向量a和b的模长,<u,v>表示向量a和b之间的夹角。12

这个公式表明,两个向量的点积等于它们模长的乘积,再乘以两个向量夹角余弦值的绝对值。此外,两个向量的点积也可以通过坐标计算,即等于两个向量对应坐标值的乘积之和。例如,如果a=(x1,y1)和b=(x2,y2),那么a·b=x1·x2+y1·y2。

向量的模的计算公式

向量的模的计算公式是|a|=√(x^2+y^2)。1

对于平面内的向量,其模的计算公式为|a|=√(x^2+y^2),即向量模长等于向量横坐标和纵坐标的平方和的平方根。

因此我们可以根据向量公式求出弧的cos角度值,tan = sin /cos = sqrt(1-cos平方) /cos

角度值 = atn(tan)*180/π,至此我们求出角度值,角度大于180为优弧,小于180度为劣弧。

代码如下:

Sub CAD判断优劣弧()
'yngqq:443440204@2024年4月8日10:57:13
    Dim arc As AcadArc
    Dim cosang As Double, tanang As Double
    Dim startPt As Variant
    Dim endPt As Variant
    Dim centerPt As Variant
    Dim vecStart As Variant
    Dim vecEnd As Variant
    Dim dotProduct As Double
    Dim lenVecStart As Double
    Dim lenVecEnd As Double
    Dim angleRad As Double
    Dim angleDeg As Double
    ' 假设您已经有一个弧对象 arc,可以根据实际情况修改获取弧的方法
    ' 这里示例假设您已经有一个名为 arc 的 AcadArc 对象
    ' 获取弧的起点、终点和圆心
For Each arc In ThisDrawing.ModelSpace
    startPt = arc.StartPoint
    endPt = arc.EndPoint
    centerPt = arc.Center
    ' 计算起点和终点向量
    vecStart = Array(startPt(0) - centerPt(0), startPt(1) - centerPt(1))
    vecEnd = Array(endPt(0) - centerPt(0), endPt(1) - centerPt(1))
    ' 计算两个向量的点积
    dotProduct = vecStart(0) * vecEnd(0) + vecStart(1) * vecEnd(1)
    ' 计算两个向量的长度
    lenVecStart = Sqr(vecStart(0) ^ 2 + vecStart(1) ^ 2)
    lenVecEnd = Sqr(vecEnd(0) ^ 2 + vecEnd(1) ^ 2)
    ' 计算夹角的弧度值
'    acos = 2 * Atn(1) - Atn() ' vbv中没acos函数,固需数学公式推算角度
'    angleRad = acos(dotProduct / (lenVecStart * lenVecEnd))
'求角度的cos值和正切值
    cosang = dotProduct / (lenVecStart * lenVecEnd)
    tanang = Sqr(1 - cosang ^ 2) / cosang
    '根据正切值求出弧度值
    angleRad = Atn(tanang)
    ' 弧度制转换为角度制
    angleDeg = angleRad * 180 / Atn(1) * 4
    ' 判断弧是优弧还是劣弧
    If angleDeg > 180 Then
        MsgBox "这是优弧(大于180度)" & vbCr & "版权所有:qq443440204", , "版权所有:qq443440204"
    Else
        MsgBox "这是劣弧(小于180度)" & vbCr & "版权所有:qq443440204", , "版权所有:qq443440204"
    End If
Next arc
End Sub

 

由上图可见,我们已正确判断出优弧和劣弧。

根据相关法律法规,以上为原创代码,版权归本博所有,引用请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山水CAD插件定制

你的鼓励是我创作最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值