您现在的位置:

数字积分法(DDA)插补直线参考程序(VB)

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

 

Sub 插补X()

    标志X = 0

    If 余数X >= Q Then

       余数X = 余数X Mod Q

       x动点 = x动点 + 1: 标志X = 1

    End If

End Sub

Sub 插补Y()

    标志Y = 0

    If 余数Y >= Q Then

       余数Y = 余数Y Mod Q

       y动点 = y动点 + 1: 标志Y = 1

    End If

End Sub

Sub 插补Z()

    标志Z = 0

    If 余数Z >= Q Then

       余数Z = 余数Z Mod Q

       z动点 = z动点 + 1: 标志Z = 1

End If

End Sub

Sub 插补公共()

    余数X = 余数X + x终点

    余数Y = 余数Y + y终点

    余数Z = 余数Z + z终点

    插补X

    插补Y

    插补Z

    插补记录 = 插补记录 + 1

End Sub

Sub 插补()

Dim c As Integer

插补记录 = 0: 余数X = 0: 余数Y = 0: 余数Z = 0: 划轮廓线

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

    Select Case 象限标志

        Case 1:   '第一象限插补

             Do Until 插补记录 = Q

                插补公共

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

             Loop

        Case 2:   '第二象限插补

                c = x终点: x终点 = z终点: z终点 = -c

                c = x步长: x步长 = z步长: z步长 = -c

             Do Until 插补记录 = Q

                插补公共

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

             Loop

        Case 3:   '第三象限插补

                x终点 = -x终点: z终点 = -z终点

                x步长 = -x步长:  z步长 = -z步长

             Do Until 插补记录 = Q

                插补公共

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

             Loop

        Case 4:  '第四象限插补

                c = x终点: x终点 = -z终点: z终点 = c

                c = x步长: x步长 = -z步长: z步长 = c

             Do Until 插补记录 = Q

                插补公共

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

             Loop

    End Select

End Sub