错失太易 发表于 2008-10-17 17:47

这题求过程!

这题还是不会啊!求个过程!

注意事项:
1. 2个R大小相等
2. 2个R与水平线和斜线相切;
3. 长446的水平线端点在斜线上。
4. 上下2条水平线的尺寸标注是指在水平线与R的切点上。

馋猫咪 发表于 2008-10-17 19:10

要相切的R,无解!:P

独孤缈 发表于 2008-10-17 20:33

R=20.10958904
不知道对不对

linduyu_y 发表于 2008-10-17 21:03

楼上厉害!:victory: :victory:

zzzzzzzzzz 发表于 2008-10-18 01:31

原帖由 错失太易 于 2008-10-17 17:47 发表 http://www.askcad.com/bbs/images/common/back.gif
这题还是不会啊!求个过程!

注意事项:
1. 2个R大小相等
2. 2个R与水平线和斜线相切;
3. 长446的水平线端点在斜线上。
4. 上下2条水平线的尺寸标注是指在水平线与R的切点上。

woaishuijia 发表于 2008-10-18 14:10

3楼和5楼都是错的,正确答案应为R20.18737523
Sub A()
    Dim L1 As AcadLine, L2 As AcadLine, L3 As Variant, P1(2) As Double, P2(2) As Double, P3 As Variant, R As Double, R1 As Double, R2 As Double
    With ThisDrawing
      '画中间水平直线,起点(0,0),端点(-446,0)
      P2(0) = -446#
      Set L1 = .ModelSpace.AddLine(P1, P2)
      
      '画右侧垂直直线,起点(0,-200),端点(0,165)
      P1(1) = -200#
      P2(0) = 0#
      P2(1) = 165#
      .ModelSpace.AddLine P1, P2
      
      '画底部水平直线,起点(0,-200),端点(-450,-200)
      P2(0) = -450#
      P2(1) = -200#
      .ModelSpace.AddLine P1, P2
      
      '画顶部水平直线,起点(0,165),端点(-406,165)
      P1(1) = 165#
      P2(0) = -406#
      P2(1) = 165#
      .ModelSpace.AddLine P1, P2
      
      '左下角圆弧圆心横坐标-450,纵坐标在后面的代码中寻找
      P1(0) = -450#
      
      '左上角圆弧圆心横坐标-406,纵坐标在后面的代码中寻找
      P2(0) = -406#
      
      '随便画一条直线,供后面代码做为辅助线使用,
      Set L2 = .ModelSpace.AddLine(P1, P2)
      
      '在0到100之间寻找圆弧的半径
      R1 = 0#
      R2 = 100#
      
      '用循环语句反复尝试.寻找正确的圆弧半径
      Do
      
            '把范围的中间值做为半径尝试
            R = (R1 + R2) / 2#
            
            '左下角圆弧圆心纵坐标-200+R
            P1(1) = -200# + R
            
            '左上角圆弧圆心纵坐标165-R
            P2(1) = 165# - R
            
            '把左下角圆弧的圆心做为辅助线的起点
            L2.StartPoint = P1
            
            '把左上角圆弧的圆心做为辅助线的端点
            L2.EndPoint = P2
            
            '偏移辅助线R距离,得到左侧斜线
            L3 = L2.Offset(R)
            
            '得到左侧斜线与中间水平直线的交点
            P3 = L1.IntersectWith(L3(0), acExtendThisEntity)
            
            '如果交点的横坐标为-446,或者寻找范围已缩到最小(即达到CAD计算极限),则可以认为已找到合理的圆弧半径,退出循环向下进行
            If P3(0) = -446# Or R = R1 Or R = R2 Then
                L2.Delete '删除辅助线
                Exit Do '退出循环
               
            '如果不符合上面的条件,交点的横坐标小于-446(交点位于中间水平直线端点的左侧),说明尝试的圆弧半径大了.
            '把这个半径做为寻找范围的新的较大一侧的边界,缩小范围,向较小的方向继续尝试
            ElseIf P3(0) < -446# Then
                R2 = R
               
            '如果上面的条件都不符合,说明交点位于中间水平直线端点的右侧,尝试的圆弧半径小了.
            '把这个半径做为寻找范围的新的较小一侧的边界,缩小范围,向较大的方向继续尝试
            Else
                R1 = R
            End If
            
            '删除偏移所得的斜线
            L3(0).Delete
      Loop
      
      '正确的圆弧半径和圆心位置已找到,下面分别画两个圆弧
      '左下角圆弧起点角度为圆心到斜线起点的角度,端点角度为270度
      .ModelSpace.AddArc P1, R, .Utility.AngleFromXAxis(P1, L3(0).StartPoint), .Utility.AngleToReal("270", acDegrees)
      
      '左上角圆弧起点角度为90度,端点角度为圆心到斜线端点的角度
      .ModelSpace.AddArc P2, R, .Utility.AngleToReal("90", acDegrees), .Utility.AngleFromXAxis(P2, L3(0).EndPoint)
    End With
End Sub 'OK了

[ 本帖最后由 woaishuijia 于 2008-10-19 06:14 编辑 ]

错失太易 发表于 2008-10-18 15:19

原帖由 woaishuijia 于 2008-10-18 14:10 发表 http://www.askcad.com/bbs/images/common/back.gif
3楼和5楼都是错的,正确答案应为R20.18737523
Sub A()
    Dim L1 As AcadLine, L2 As AcadLine, L3 As Variant, P1(2) As Double, P2(2) As Double, P3 As Variant, R As Double, R1 As Double, R2 As Double ...

朋友能贴个gif录像上来吗?这么多字看着头晕
这里有教怎么搞录像!http://www.askcad.com/bbs/thread-8368-1-1.html

liuyu0125 发表于 2008-10-18 17:20

厉害~~~:)

jszj 发表于 2008-10-18 20:43

原帖由 zzzzzzzzzz 于 2008-10-18 01:31 发表 http://www.askcad.com/bbs/images/common/back.gif

:P

Z版啊~~你方法不能保证2R的相等~~:lol

jszj 发表于 2008-10-18 21:03

运行了6楼的VBA其结果:
页: [1]
查看完整版本: 这题求过程!