画线之逐点比较法

原创 2007年09月28日 11:03:00

这个学期,专业开设了<计算机图形学>.用的是清华唐泽圣的书。今天刚学了逐点比较法,书上只是分别讨论了各象限线的增量计算公式。作为练习,我用编程实现了一下。相信这是无数学过这门课的同学都做过的事情。

    所谓象限,应该是把直线看作向量,将它们起点平移到坐标原点,然后根据走向便可划分出不同象限的直线。

如上图所示:给出了在屏幕坐标系下,按书上所说的四种象限的直线。线i对应第i个象限(1<=i<=4)。然后就能套用书上的关于偏差运算的公式来生成各个象限的直线。

下面给出我的源代码,用的是TC2.0。改天再试着用Java实现一下,因为我们老师说Tc2.0中的颜色太少了,要学着用其他语言实现书上的算法。有什么不足之处,请各位大侠多多指点。

#include<graphics.h>
#include<math.h>
#include<stdio.h>

int sign(int a){
    if( a < 0) return -1;
    return a != 0;
}

void drawLine(int x1,int y1,int x2,int y2){
  int xt,yt;
  int F,n,i;
  int num;
  int xSign,ySign;
  x2 -= x1; xSign = sign(x2);
  y2 -= y1; ySign = sign(y2);
  num = xSign * ySign;
  F = 0;
  putpixel(x1,y1,RED);
  xt = x1,yt = y1;
  n = abs(y2) + abs(x2);
  for(i = 0; i < n ;i++){
    if(F>=0){
        if(num > 0){
            F -= abs(y2);
            xt += xSign;
        }
        else{
            F -= abs(x2);
            yt += ySign;
        }
    }
    else{
        if(num>0){
            yt += ySign;
            F += abs(x2);
        }
        else{
            xt += xSign;
            F += abs(y2);
        }
    }
    putpixel(xt,yt,RED);
  }
}
int main(){
  int gd = DETECT,gm;
  int x1,y1,x2,y2;
  registerbgidriver(EGAVGA_driver);
  initgraph(&gd,&gm,"");
  do{
     printf("x1 = ");scanf("%d",&x1);
     if(x1<0) break;
     printf("y1 = "); scanf("%d",&y1);
     printf("x2 = "); scanf("%d",&x2);
     printf("y2 = "); scanf("%d",&y2);
     drawLine(x1,y1,x2,y2);
  }while(1);

  return 0;
}

 

逐点比较法生成直线,计算机图形学实验。

{****************************************}{逐点比较法生成直线,计算机图形学实验。  }{Disigned by whbo ,第一象限,逆时针。    }{C...
  • whbo
  • whbo
  • 2004年12月28日 17:19
  • 2033

逐点比较法插补

  • 2017年05月17日 21:20
  • 10KB
  • 下载

逐点绘出检测出的轮廓图

#include #include #include #include int main( int argc, char* argv[] ) { // int i...

vb直线逐点比较法

  • 2014年05月15日 16:43
  • 32KB
  • 下载

逐点比较法画直线

  • 2015年01月08日 09:16
  • 1KB
  • 下载

转贴:使用GetDIBts/SetDIBits高速逐点处理

转自:http://hi.baidu.com/shallow_sleep/blog/item/2fde85123c04f256f819b8b5.html   之前逐点处理像素的时候都用GetPix...

使用GetDIBts/SetDIBits高速逐点处理

原文地址::http://blog.csdn.net/stevenkoh/article/details/7900823 转自:http://hi.baidu.com/shallow...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:画线之逐点比较法
举报原因:
原因补充:

(最多只允许输入30个字)