C++ 如何为dy编写bresenhams线条绘制程序>;dx?

C++ 如何为dy编写bresenhams线条绘制程序>;dx?,c++,C++,我正在尝试为dy>dx编写一个bresenhams程序。 我们的老师告诉我们,用C++编写BReShanman线描程序,它将满足所有可能的条件,并且通过提供这个公式,她认为我们只是dx>dy的ALGO。 - G=G+2*dy-2dx; - G=G+2*dy; 把剩下的课程留给我们做研究或者H.W 然而,我已经用算法算出了这个程序(仅适用于dx>dy)。我只想知道这些公式是否足够用于后面的部分,或者需要做什么修改 #include<conio.h> #include<io

我正在尝试为dy>dx编写一个bresenhams程序。 我们的老师告诉我们,用C++编写BReShanman线描程序,它将满足所有可能的条件,并且通过提供这个公式

,她认为我们只是dx>dy的ALGO。
 - 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);
 }

}
#包括
#包括
#包括
#包括
#包括
void main()
{
int i,x,y,x0,y0,x1,y1,G,dx,dy,gd=检测,gm;
initgraph(&gd,&gm,“d://tc//bgi//”);
coutx0>>y0;
coutx1>>y1;
dx=x1-x0;
dy=y1-y0;
dx=abs(dx);
dy=abs(dy);
像素(x0,y0,白色);
G=2*dy-dx;
x=x0;y=y0;
如果(dx>=dy)
{
对于(x=x+1;x0)
{
y=y+1;
G=G+2*dy-2*dx;
}
其他的
{
G=G+2*dy;
}
像素(x,y,白色);
}
}

实际上,
dy>dx
dx>dy
是一样的。但是你可能应该检查给出分数的顺序。我会怎么做:

start
end
视为输入点,
mem
是给定
宽度和
高度的帧缓冲区(或图像等)中像素的索引

k = d_y / d_x;

if (-1 <= k && k <= 1) {
    c0 = 2 * abs(d_y);
    c1 = c0 - 2 * abs(d_x);
    p = c0 - abs(d_x);

    if (start->x <= end->x) {
        for (int i = start->x + 1; i < end->x; ++i) {
            if (p < 0) {
                p += c0;
                ++mem;
            } else {
                p += c1;
                if (k >= 0) {
                    mem += width + 1;
                } else {
                    mem += (1 - width);
                }
            }
            colorBuffer[mem] = currentColor;
        }
    } else {
        for (int i = start->x - 1; i > end->x; --i) {
            if (p < 0) {
                p += c0;
                --mem;
            } else {
                p += c1;
                if (k >= 0) {
                    mem -= width + 1;
                } else {
                    mem += width - 1;
                }
            }
            colorBuffer[mem] = currentColor;
        }
    }
}
else { 
    c0 = 2 * abs(d_x);
    c1 = c0 - 2 * abs(d_y);
    p = c0 - abs(d_y);
    //this is the same as dx >= dy, just switch x and y
   ...
k=d_y/d_x;
如果(-1 x+1;ix;++i){
if(p<0){
p+=c0;
++mem;
}否则{
p+=c1;
如果(k>=0){
mem+=宽度+1;
}否则{
mem+=(1-宽度);
}
}
colorBuffer[mem]=当前颜色;
}
}否则{
对于(int i=start->x-1;i>end->x;--i){
if(p<0){
p+=c0;
--mem;
}否则{
p+=c1;
如果(k>=0){
mem-=宽度+1;
}否则{
mem+=宽度-1;
}
}
colorBuffer[mem]=当前颜色;
}
}
}
否则{
c0=2*abs(d_x);
c1=c0-2*abs(d_y);
p=c0-绝对值(d_y);
//这与dx>=dy相同,只需切换x和y即可
...

dy>dx
的工作原理与
dx>dy
相同,您只需到处交换
x
y
。没有工作,我已经试过了。