Function: int ArcXY(double dfx0,double dfy0,double dfrx,
double dfry,int angle)
Description: 在X-Y轴所构成的平面上,以圆弧运动的方式从目前位置经过指
定的参考点到目的点。调用此函数成功将增加运动命斗档敬令的库存数目。
Parameters: dfx0, dfy0 参考点的X-Y轴座标值
dfrx, dfry 圆心的X-Y轴座标值
angle 插补角度
Calls: 无
Return Value: 大於或等於0 给予此运动命令的编码
小於0 失败,传回值的意义可参考错误信息代码
**************************************************************************/
#include <stdio.h>
#include <math.h>
int ArcXY(double dfx0,double dfy0,double dfrx, double dfry,int angle)
int symbol(double number)
main()
{
ArcXY(0,0,-3,5,360)
getch()
}
int ArcXY(double dfx0,double dfy0,double dfrx, double dfry,int angle)
{
FILE *f1
double i,j,dx,dy,dfr,x,y,ang,step,f = 0.01
int flag,tempx,tempy,statex,statey,direction 空慎= 1
dfr = sqrt((dfrx - dfx0) * (dfrx - dfx0) + (dfry - dfy0) * (dfry - dfy0))
if(dfx0 == 0)
{
dfx0 = 1
dfrx = dfrx + 1
statex =1
}
if(dfy0 == 0)
{
dfy0 = 1
dfry = dfry + 1
statey =1
}
dfrx = 2 * dfx0 - dfrx
i = dfx0 - dfrx
j = dfy0 - dfry
x = dfx0
y = dfy0
step = ang = 180 * 2 * asin(f/(2*dfr))/3.1415926
if(((dfx0 > 0) && (dfy0 > 0)) || ((dfx0 < 0) && (dfy0 < 0)))
{
flag = direction
}
if(((dfx0 < 0) && (dfy0 > 0)) || ((dfx0 > 0) && (dfy0 < 0)))
{
flag = -direction
}
f1=fopen("c:\\c.txt","w+")
if(statex ==1)
{
蠢启 x = x - 1
}
if(statey ==1)
{
y = y - 1
}
fprintf(f1,"%f,",x)
fprintf(f1,"%f\n",y)
while(ang < angle)
{
dx = f * (j + flag*(f * i)/(2 * dfr))/dfr
dy = f * (i - flag*(f * j)/(2 * dfr))/dfr
tempx = symbol(x)
tempy = symbol(y)
x = x + dx
y = y + dy
fprintf(f1,"%f,",x)
fprintf(f1,"%f\n",y)
if( (tempx !=symbol(x)) || (tempy != symbol(y)) )
{
flag = -flag
}
i = i - dx
j = j + dy
ang = ang + step
}
return 0
}
int symbol(double number)
{
if(number > 0)
{
return 1
}
else
{
return -1
}
}
数字积分法(DDA)插补直线参考程序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
===========================================
逐点比较法圆弧插补VB程序
Sub 偏差计算()
偏差 = Sqr((x动点 - x圆心) 2 + (z动点 - z圆心) 2) - R
End Sub
Sub 插补()
x动点 = x起点: z动点 = z起点:
动点象限判别
xx: Select Case 象限标志
Case 1: 单步连续判断
If 顺逆标志 = "顺" Then'第一象限插补
Do Until (x动点 - x终点) = 0 And (z动点 - z终点) = 0
If 偏差 >= 0 Then
x动点 = x动点 - 1:
Line -Step(0, -x步长), vbRed
Else
z动点 = z动点 + 1:
Line -Step(z步长, 0), vbRed
End If
偏差计算
动点象限判别
If 象限标志 <>1 Then
GoTo xx
End If
单步连续判断
Loop
ElseIf 顺逆标志 = "逆" Then
Do Until (x动点 - x终点) = 0 And (z动点 - z终点) = 0
If 偏差 >= 0 Then
z动点 = z动点 - 1:
Line -Step(-z步长, 0), vbRed
Else
x动点 = x动点 + 1:
Line -Step(0, x步长), vbRed
End If
DoEvents
偏差计算
动点象限判别
If 象限标志 <>1 Then
GoTo xx
End If
Loop
End If
Case 2: 单步连续判断
If 顺逆标志 = "顺" Then'第二象限插补
Do Until (x动点 - x终点) = 0 And (z动点 - z终点) = 0
If 偏差 >= 0 Then
z动点 = z动点 - 1:
Line -Step(-z步长, 0), vbRed
Else
x动点 = x动点 - 1:
Line -Step(0, -x步长), vbRed
End If
偏差计算
动点象限判别
If 象限标志 <>2 Then
GoTo xx
End If
Loop
ElseIf 顺逆标志 = "逆" Then
Do Until (x动点 - x终点) = 0 And (z动点 - z终点) = 0
If 偏差 >= 0 Then
x动点 = x动点 + 1:
Line -Step(0, x步长), vbRed
Else
z动点 = z动点 + 1:
Line -Step(z步长, 0), vbRed
End If
偏差计算
动点象限判别
If 象限标志 <>2 Then
GoTo xx
End If
Loop
End If
Case 3: 单步连续判断
If 顺逆标志 = "顺" Then'第三象限插补
Do Until (x动点 - x终点) = 0 And (z动点 - z终点) = 0
If 偏差 >= 0 Then
x动点 = x动点 + 1:
Line -Step(0, x步长), vbRed
Else
z动点 = z动点 - 1:
Line -Step(-z步长, 0), vbRed
End If
DoEvents
偏差计算
动点象限判别
If 象限标志 <>3 Then
GoTo xx
End If
Loop
ElseIf 顺逆标志 = "逆" Then
Do Until (x动点 - x终点) = 0 And (z动点 - z终点) = 0
If 偏差 >= 0 Then
z动点 = z动点 + 1:
Line -Step(z步长, 0), vbRed
Else
x动点 = x动点 - 1:
Line -Step(0, -x步长), vbRed
End If
偏差计算
动点象限判别
If 象限标志 <>3 Then
GoTo xx
End If
Loop
End If
Case 4: 单步连续判断
If 顺逆标志 = "顺" Then'第三象限插补
Do Until (x动点 - x终点) = 0 And (z动点 - z终点) = 0
If 偏差 >= 0 Then
z动点 = z动点 + 1:
Line -Step(z步长, 0), vbRed
Else
x动点 = x动点 + 1:
Line -Step(0, x步长), vbRed
End If
偏差计算
动点象限判别
If 象限标志 <>4 Then
GoTo xx
End If
Loop
ElseIf 顺逆标志 = "逆" Then
Do Until (x动点 - x终点) = 0 And (z动点 - z终点) = 0
If 偏差 >= 0 Then
x动点 = x动点 - 1:
Line -Step(0, -x步长), vbRed
Else
z动点 = z动点 - 1:
Line -Step(-z步长, 0), vbRed
End If
偏差计算
动点象限判别
If 象限标志 <>4 Then
GoTo xx
End If
Loop
End If
End Select
End Sub
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)