我正在尝试为dy> dx编写一个bresenhams程序。 我们的老师告诉我们用C ++编写bresenhans线描图程序,它将满足所有可能的条件,并且通过提供这个公式,她认为我们只是dx> dy的算法
- G=G+2*dy-2dx;
- G=G+2*dy;
将剩余的程序作为研究或H.W。
留给我们然而,我已经使用算法找出了这个程序(仅适用于dx> dy)。我只想知道这些公式对于后一部分是否足够或需要进行哪些修改?
#include<conio.h>
#include<iostream.h>
#include<stdio.h>
#include<graphics.h>
#include<math.h>
void main()
{
int i,x,y,x0,y0,x1,y1,G,dx,dy,gd=DETECT,gm;
initgraph(&gd,&gm,"d://tc//bgi//");
cout<<" Enter the first coordinate of a line : ";
cin>>x0>>y0;
cout<<"Enter the last coordinate of a line : ";
cin>>x1>>y1;
dx=x1-x0;
dy=y1-y0;
dx=abs(dx);
dy=abs(dy);
putpixel(x0,y0,WHITE);
G=2*dy-dx;
x=x0;y=y0;
if(dx>=dy)
{
for(x=x+1;x<=x1;x++)
{
if(G>0)
{
y=y+1;
G=G+2*dy-2*dx;
}
else
{
G=G+2*dy;
}
putpixel(x,y,WHITE);
}
}
答案 0 :(得分:1)
实际上dy>dx
与dx>dy
相同。但是你应该检查给出点的顺序。我该怎么做:
将start
和end
视为输入点,mem
是帧缓冲区(或图像或其他)中具有给定width
和{{1}的像素索引}}
height