永发信息网

DDA算法:如何画出斜率大于1的直线?

答案:3  悬赏:60  手机版
解决时间 2021-03-14 07:11
int CTest02View::Draw_Line(int x0, int y0, int x1, int y1, COLORREF color,CDC* pDC)
{
//TODO:Add some code here
int x;
float dx,dy,k,y;
dx=x1-x0;
dy=y1-y0;
k=dy/dx;
if(k<=1||k>=-1)
{
y=y0;
for(x=x0;x<=x1;x++)
{
pDC->SetPixel(x,int(y+0.5),color);
y=y+k;
}
}
else
{
x=x0;
for(y=y0;y<=y1;y++)
{
pDC->SetPixel(y,int(x+0.5),color);
x=x+1/k;
}
}

return true;
}

为什么我还是只能画出斜率小于1的直线呢?斜率大于一的直线不能显示。What's wrong?
不是这个,我已经改动过很多次了,效果不明显。不知道为什么。
最佳答案
下面是我编写的一个在12864上画线的函数,可以画任意方向的线段。但先要有一个画点函数:Lcd_PutPixel(x,y,1)。
line(int x0,int y0,int x1,int y1)
{
int i,dx,dy,e,x,y;
Lcd_PutPixel(x0,y0,1);
Lcd_PutPixel(x1,y1,1);
dx=x1-x0;
dy=y1-y0;
x=x0;
y=y0;
if(dx>0&&dy>0)
{
if(dx>dy)
{
e=-dx;
for(i=0;i<dx;i++)
{
Lcd_PutPixel(x,y,1);
x++;
e=e+2*dy;
if(e>=0)
{
y++;
e=e-2*dx;
}
}
}
else
{
e=-dy;
x=x0;
y=y0;
for(i=0;i<dy;i++)
{
Lcd_PutPixel(x,y,1);
y++;
e=e+2*dx;
if(e>=0)
{
x++;
e=e-2*dy;
}
}
}
}
if(dx<0&&dy<0)
{
dx=x0-x1;
dy=y0-y1;
if(dx>dy)
{
e=-dx;
for(i=0;i<dx;i++)
{
Lcd_PutPixel(x,y,1);
x--;
e=e+2*dy;
if(e>=0)
{
y--;
e=e-2*dx;
}
}
}
else
{
e=-dy;
for(i=0;i<dy;i++)
{
Lcd_PutPixel(x,y,1);
y--;
e=e+2*dx;
if(e>=0)
{
x--;
e=e-2*dy;
}
}
}
}
if(dx>0&&dy<0)
{
dy=y0-y1;
if(dx>dy)
{
e=-dx;
for(i=0;i<dx;i++)
{
Lcd_PutPixel(x,y,1);
x++;
e=e+2*dy;
if(e>=0)
{
y--;
e=e-2*dx;
}
}
}
else
{
e=-dy;
for(i=0;i<dy;i++)
{
Lcd_PutPixel(x,y,1);
y--;
e=e+2*dx;
if(e>=0)
{
x++;
e=e-2*dy;
}
}
}
}
if(dx<0&&dy>0)
{
dx=x0-x1;
if(dx>dy)
{
e=-dx;
for(i=0;i<dx;i++)
{
Lcd_PutPixel(x,y,1);
x--;
e=e+2*dy;
if(e>=0)
{
y++;
e=e-2*dx;
}
}
}
else
{
e=-dy;
for(i=0;i<dy;i++)
{
Lcd_PutPixel(x,y,1);
y++;
e=e+2*dx;
if(e>=0)
{
x--;
e=e-2*dy;
}
}
}
}
if(dx!=0&&dy==0)
{
if(dx>0)
{
for(i=0;i<dx;i++)
{
Lcd_PutPixel(x,y,1);
x++;
}
}
else
{
dx=x0-x1;
for(i=0;i<dx;i++)
{
Lcd_PutPixel(x,y,1);
x--;
}
}
}
if(dx==0&&dy!=0)
{
if(dy>0)
{
for(i=0;i<dy;i++)
{
Lcd_PutPixel(x,y,1);
y++;
}
}
else
{
dy=y0-y1;
for(i=0;i<dy;i++)
{
Lcd_PutPixel(x,y,1);
y--;
}
}
}
}
全部回答
1.x的类型有问题,改成float 2.判断条件 if(k<=1||k>=-1) 改成 if(k<=1 && k>=-1) 3.坐标写反了 pDC->SetPixel(y,int(x+0.5),color); 改成 pDC->SetPixel(int(x+0.5),y,color); 另外,斜率不存在的直线也要考虑
你好 楼主。 很幸运的看到你的问题。 但是又很遗憾到现在还没有人回答你的问题。也可能你现在已经在别的地方找到了答案,那就得恭喜你啦。 可能是你问的问题有些专业了,没人会。或者别人没有遇到或者接触过你的问题,所以帮不了你。建议你去问题的相关论坛去求助,那里的人通常比较多,也比较热心,可能能快点帮你解决问题。 希望我的回答也能够帮到你! 祝你好运。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
朗轩定制家居(哈尔滨)公司地址有知道的么?有
尾巴长毛的老鼠
河南省光山县2016年教师资格证什么时候拿
fly的过去式是什么?
本人收藏把刀上面刻有《塔尔寺》3个字,它属
苏庄站在哪里啊,我有事要去这个地方
奔驰ml350远光灯怎么开
LED手电筒有时亮有时不亮请问什么问题
甲之彩美甲工作室在什么地方啊,我要过去处理
地税局的发票是不是每个月都要缴销?
攻螺纹,材质紫铜,螺纹10*2,丝攻老是断,怎
我能不能拿着别人的身份证以及用这张身份证办
起亚k×3儿童锁怎么解除
延秀小学团结校区(北门)在什么地方啊,我要过
求主角变成魔兽的小说,只要西方玄幻
推荐资讯
找一本小说 忘了书名 现代文 开头大致内容是
西安齐力铁路学校好还是西安蓝天科技学校航空
七彩屋地址在什么地方,想过去办事
东翔汽配在哪里啊,我有事要去这个地方
军火女王里的约尔姆加德到底是谁?
赵州桥是一篇什么休裁文
地下为什么有水呢
有一首慢摇歌,歌词午夜寂寞,什么不快乐.不是
怎么推掉同事聚餐?有一位同事特别不喜欢我,
有没有类似于孤岛求生的电视剧或者小说?
中心大街东段我想知道这个在什么地方
盛康邮政支局这个地址在什么地方,我要处理点
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?