您现在的位置:

数字积分法(DDA)插补圆弧参考程序(VB)

根据该插补软件框图(参见http://www.busnc.com/ly/DDA/DDAyuanli.htm),:

Sub 插补()

        PSet (z原点, x原点), vbRed

        余数X = 0: 余数Y = 0: 余数Z = 0: 插补记录 = 0:

过象限标志 = 0: 跨象限数量 = 0

If Opt逆圆 = False Then

xx:             跨象限数量 = 跨象限数量 + 1

    Select Case 象限标志

        Case 1:   '第一象限插补

                   过象限预处理

                Do Until (x动点对圆心 - x终点对圆心) ^ 2 + (z动点对圆心 - z终点对圆心) ^ 2 <= 跨象限数量 ^ 2

                   If x动点对圆心 = 0 Then

                      象限标志 = 2:

                      过象限标志 = 1

                      GoTo xx

                   End If

                   插补公共

                   Line -Step(z步长 × 标志Z, -x步长 × 标志X), vbRed

               Loop

                   过象限标志 = 0

        Case 2:   '第二象限插补

                   过象限预处理

                Do Until (x动点对圆心 - x终点对圆心) ^ 2 + (z动点对圆心 - z终点对圆心) ^ 2 <= 跨象限数量 ^ 2

                   If x动点对圆心 = 0 Then

                      象限标志 = 3:

                      过象限标志 = 1

                      GoTo xx

                   End If

                   插补公共

                   Line -Step(-x步长 × 标志X, z步长 × 标志Z), vbRed

               Loop

                   过象限标志 = 0

        Case 3:   '第三象限插补

                   过象限预处理

                Do Until (x动点对圆心 - x终点对圆心) ^ 2 + (z动点对圆心 - z终点对圆心) ^ 2 <= 跨象限数量 ^ 2

                   If x动点对圆心 = 0 Then

                      象限标志 = 4:

                      过象限标志 = 1

                      GoTo xx

                   End If

                   插补公共

                   Line -Step(z步长 × 标志Z, -x步长 × 标志X), vbRed

               Loop

                   过象限标志 = 0

        Case 4:  '第四象限插补

                   过象限预处理

                Do Until (x动点对圆心 - x终点对圆心) ^ 2 + (z动点对圆心 - z终点对圆心) ^ 2 <= 跨象限数量 ^ 2

                   If x动点对圆心 = 0 Then

                      象限标志 = 1:

                      过象限标志 = 1

                      GoTo xx

                   End If

                   插补公共

                   Line -Step(-x步长 × 标志X, z步长 × 标志Z), vbRed

               Loop

                   过象限标志 = 0

    End Select

Else

xy:             跨象限数量 = 跨象限数量 + 1

    Select Case 象限标志

        Case 1:   '第一象限插补

                   过象限预处理

                Do Until (x动点对圆心 - x终点对圆心) ^ 2 + (z动点对圆心 - z终点对圆心) ^ 2 <= 跨象限数量 ^ 2

                   单步连续判断

                   If z动点对圆心 = 0 Then

                      象限标志 = 4:

                      过象限标志 = 1

                      GoTo xy

                   End If

                   插补公共

                   Line -Step(-z步长 × 标志Z, x步长 × 标志X), vbRed

               Loop

                   过象限标志 = 0

        Case 2:   '第二象限插补

                   过象限预处理

                Do Until (x动点对圆心 - x终点对圆心) ^ 2 + (z动点对圆心 - z终点对圆心) ^ 2 <= 跨象限数量 ^ 2

                   单步连续判断

                   If z动点对圆心 = 0 Then

                      象限标志 = 1:

                      过象限标志 = 1

                      GoTo xy

                   End If

                   插补公共

                   Line -Step(x步长 × 标志X, -z步长 × 标志Z), vbRed

               Loop

                   过象限标志 = 0

        Case 3:   '第三象限插补

                   过象限预处理

                Do Until (x动点对圆心 - x终点对圆心) ^ 2 + (z动点对圆心 - z终点对圆心) ^ 2 <= 跨象限数量 ^ 2

                   If z动点对圆心 = 0 Then

                      象限标志 = 2:

                      过象限标志 = 1

                      GoTo xy

                   End If

                   插补公共

                   Line -Step(-z步长 × 标志Z, x步长 × 标志X), vbRed

               Loop

                   过象限标志 = 0

        Case 4:  '第四象限插补

                   过象限预处理

                Do Until (x动点对圆心 - x终点对圆心) ^ 2 + (z动点对圆心 - z终点对圆心) ^ 2 <= 跨象限数量 ^ 2

                   If z动点对圆心 = 0 Then

                      象限标志 = 3:

                      过象限标志 = 1

                      GoTo xy

                   End If

                   插补公共

                   Line -Step(x步长 × 标志X, -z步长 × 标志Z), vbRed

               Loop

                   过象限标志 = 0

    End Select

cc: End If

End Sub