您现在的位置: |
数字积分法(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 |