java将两点进行连线,c++ 算法 栅格中两点之间连线

本文介绍了一个C++实现的自适应Bresenham算法,用于在给定起点和终点坐标时,根据两点间的方向和比例绘制直线,适用于不同方向和比例的路径。算法通过计算偏移量和调整步长来实现高效路径绘制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include #include

using namespace std;

void paint(int,int);

void paint(int i,int j){//画出点位

cout<

}

int main () {

int A[]= {7,2};//起点

int B[]={7,2};//终点

int Ax=-1,Ay=-1,Bx=-1,By=-1;

Ax=A[0];

Ay=A[1];

Bx=B[0];

By=B[1];

int width,height,left=-1,times=-1,shu=-1;

width=abs(Ax-Bx)+1;

height=abs(Ay-By)+1;if(width>height){

shu=0;

times=width/height;

cout<

left=width%height;

cout<

}else if(width

shu=1;

times=height/width;

cout<

left=height%width;

cout<

}else{

shu=2;

}if(Ax>Bx){if(Ay>By){if(shu==2){for(int i=0;i

paint(Bx+i,By+i);

}

}else if(shu==1){for(int i=0;i0){for(int j=0;j

paint(Bx,By);

By+=1;

}

Bx+=1;

}else{for(int j=0;j

paint(Bx,By);

By+=1;

}

Bx+=1;

}

left-=1;

}

}else{for(int i=0;i0){for(int i=0;i

paint(Bx,By);

Bx+=1;

}

By+=1;

}else{for(int j=0;j

paint(Bx,By);

Bx+=1;

}

By+=1;

}

left-=1;

}

}

}else if(Ay

paint(Bx+i,By-i);

}

}else if(shu==1){for(int i=0;i0){for(int j=0;j

paint(Bx,By);

By-=1;

}

Bx+=1;

}else{for(int j=0;j

paint(Bx,By);

cout<

By-=1;

}

Bx+=1;

}

left-=1;

}

}else{for(int i=0;i0){for(int i=0;i

paint(Bx,By);

Bx+=1;

}

By-=1;

}else{for(int j=0;j

paint(Bx,By);

Bx+=1;

}

By-=1;

}

left-=1;

}

}

}else{for(int i=0;i

paint(Bx+i,By);

}

}

}else if(AxBy){if(shu==2){for(int i=0;i

paint(Ax+i,Ay-i);

}

}else if(shu==1){for(int i=0;i0){for(int j=0;j

paint(Ax,Ay);

Ay-=1;

}

Ax+=1;

}else{for(int j=0;j

paint(Ax,Ay);

Ay-=1;

}

Ax+=1;

}

left-=1;

}

}else{for(int i=0;i0){for(int i=0;i

paint(Ax,Ay);

Ax+=1;

}

Ay-=1;

}else{for(int j=0;j

paint(Ax,Ay);

Ax+=1;

}

Ay-=1;

}

left-=1;

}

}

}else if(Ay

paint(Ax+i,Ay+i);

}

}else if(shu==1){for(int i=0;i0){for(int j=0;j

paint(Ax,Ay);

Ay+=1;

}

Ax+=1;

}else{for(int k=0;k

paint(Ax,Ay);

Ay+=1;

}

Ax+=1;

}

left-=1;

}

}else{for(int i=0;i0){for(int i=0;i

paint(Ax,Ay);

Ax+=1;

}

Ay+=1;

}else{for(int j=0;j

paint(Ax,Ay);

Ax+=1;

}

Ay+=1;

}

left-=1;

}

}

}else{for(int i=0;i

paint(Ax+i,Ay);

}

}

}else{if(Ay>By){for(int i=0;i

paint(Bx,By+i);

}

}else if(Ay

paint(Ax,Ay+i);

}

}else{for(int i=0;i

paint(Ax,Ay);

}

}

}return0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值