当前位置:首页 > 网络编程 > 软件语言 > C语言 > C语言实现DDA和Bresenham直线算法

C语言实现DDA和Bresenham直线算法

点击次数:26 次 发布日期:2008-12-01 12:47:01 作者:源代码网
源代码网推荐

    用C语言来实现的DDA和BRESENHAM直线算法代码。

#include <graphics.h>
#include <stdio.h>
#include <math.h>
#include <process.h>
/* she ru */
int Round(float a)
{
 return (int)(a + 0.5);
}
/* DDA */
void LineWithDDA(int xStart,int yStart,int xEnd,int yEnd)
{
 int dx =xEnd - xStart,dy =yEnd - yStart,steps,k;
 float xIn, yIn, x = xStart, y = yStart;
 if(fabs(dx) > fabs(dy))
 {
  steps = fabs(dx);
 }
 else
 {
  steps = fabs(dy);
 }
 xIn = (float)dx / (float)steps;
 yIn = (float)dy / (float)steps;
 putpixel(Round(x),Round(y),2);
 for(k=0;k<steps;k++)
 {
  x+=xIn;
  y+=yIn;
  putpixel(Round(x),Round(y),2);
 }
 getch();
}
/* |k|<1 */
void LineWithBresenham_One(int xStart,int yStart,int xEnd,int yEnd)
{
 int dx = fabs(xEnd -xStart), dy = fabs(yEnd - yStart);
 int currentP = 2 * dy - dx;
 int twoDy = 2 * dy, twoDySubTwoDx = 2 * (dy - dx);
 int x, y;
 if(xStart == xEnd)
 {
  line(xStart,yStart,xEnd,yEnd);
  return ;
 }
 if(yStart == yEnd)
 {
  line(xStart,yStart,xEnd,yEnd);
  return;
 }
 if(xStart > xEnd)
 {
  x = xEnd;
  y = yEnd;
  xEnd = xStart;
 }
 else
 {
  x = xStart;
  y = yStart;
 }
 putpixel(x,y,2);
 while(x < xEnd)
 {
  x++;
  if(currentP < 0)
  {
   currentP += twoDy;
  }
  else
  {
   y++;
   currentP += twoDySubTwoDx;
  }
  putpixel(x,y,2);
 }
 getch();
}
/* |k|>1 */
void LineWithBresenham_Two(int xStart,int yStart,int xEnd,int yEnd)
{
 int dx = fabs(xEnd -xStart), dy = fabs(yEnd - yStart); [Page]
 int currentP = 2 * dy - dx;
 int twoDx = 2 * dx, twoDxSubTwoDy = 2 * (dx - dy);
 int x, y;
 if(xStart == xEnd)
 {
  line(xStart,yStart,xEnd,yEnd);
  return ;
 }
 if(yStart == yEnd)
 {
  line(xStart,yStart,xEnd,yEnd);
  return;
 }
 if(yStart > yEnd)
 {
  x = xEnd;
  y = yEnd;
         yEnd = yStart;
 }
 else
 {
  x = xStart;
  y = yStart;
 }
 putpixel(x,y,2);
 while(y < yEnd)
 {
  y++;
  if(currentP < 0)
  {
   currentP += twoDx;
  }
  else
  {
   x++;
   currentP += twoDxSubTwoDy;
  }
  putpixel(x,y,2);
 }
 getch();
}
void InitScreen()
{
   clrscr();
   printf("\n\n\n\n\n             ***********************************************************\n");
   printf("             *                                                         *\n");
   printf("             *  This is a graphics system,you can use it to graphics.  *\n"); 源代码网供稿.

网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华