void LinearMotion(int x1, int y1, int x2, int y2, int v)
{
//速度分量
double vy
double vx
//根据运动类型,计算速度分量大小
if (y2 == y1)
{
vx = v
vy = 0
}
else if (x2 == x1)
{
vx = 0
vy = v
}
else
{
//其他运动
double tanTheta = (double)abs(y2 - y1) / (double)abs(x2 - x1)
double theta = atan(tanTheta)
vy = sin(theta) * v
vx = cos(theta) * v
}
//根据速度方向的正负,求速度分量的符号
int vxFlag = 0
int vyFlag = 0
if (x2 - x1 > 0)
vxFlag = 1
else if (x2 - x1 < 0)
vyFlag = -1
if (y2 - y1 > 0)
vyFlag = 1
else if (y2 - y1 < 0)
vyFlag = -1
if (vxFlag == 0 && vyFlag == 0)
return
vx = vx * vxFlag
vy = vy * vyFlag
double x, y
x = x1
y = y1
while (1)
{
cleardevice()
solidcircle(x, y, 25)
FlushBatchDraw()
Sleep(40)
x += vx
y += vy
if (vxFlag == 1)
{
// 符号为正,直到大于等于终止点x2坐标为止
if (x >= x2)
break
}
else if (vxFlag == -1)
{
// 符号为负,直到小于等于终止点x2坐标为止
if (x <= x2)
break
}
if (vyFlag == 1)
{
// 符号为正,直到大于等于终止点y2坐标为止
if (y >= y2)
break
}
else if (vyFlag == -1)
{
// 符号为负,直到小于等于终止点y2坐标为止
if (y <= y2)
break
}
}
}
int main()
{
initgraph(800, 600)
// 坐标系原点在窗体中心,X轴正方向向右,Y轴正方向向上
setorigin(400, 300)
setaspectratio(1, -1)
// 设置背景色
setbkcolor(RGB(164, 225, 202))
// 使用背景色清空窗体
cleardevice()
LinearMotion(-200, 200, 200, 200, 5)
LinearMotion(200, 200, 200, -200, 5)
LinearMotion(200, -200, -200, -200, 5)
LinearMotion(-200, -200, -200, 200, 5)
getchar()
closegraph()
return 0
}