计算机图形学作业:中点画线法和 Bresenham 法绘制直线

作业要求:

1. 请采用中点画线法和 Bresenham 法绘制直线(共100 分)。

要求: (1) 给出每种算法的文字描述(共 50 分,每种算法各 25 分)。 (2) 编写函数,在给定起点和终点的情况下,计算出直线上 其它的点,并将这些点存储在数组中(共 50 分,每个函数各 25 分)。

中点画线法

一、算法的文字描述

首先需要根据直线段的斜率k,除了斜率不存在的情况(该情况直线可以直接画出)将直线划分为k>1、0<=k<=1、-1<=k<0、k<-1 四种情况,当0<=k<=1、-1<=k<0时,x方向为主位移方向;k>1、k<-1时,y方向为主位移方向。

以下做分类说明:

1.在0<=k<=1时的中点画线算法:

  1. 输入直线的起点(x1,y1),(x2,y2)
  2. 初始化,计算出dx=x2-x1,dy=y2-y1,d=dx-2dy,x=x1,y=y1,deta1=-2dy,deta2=2dx-2dy。
  3. 将点(x,y)存入数组
  4. 判断x是否小于x2,如果x
  5. 如果d<0,则x=x+1,y=y+1,d=d+deta2;否则x=x+1,y不变,d=d+deta1
  6. 将点(x,y)存入数组,并转入步骤(4)

2.在-1<=k<0时的中点画线算法:

  1. 输入直线的起点(x1,y1),(x2,y2)
  2. 初始化,计算出dx=x2-x1,dy=y2-y1,d=-dx-2dy,x=x1,y=y1,deta1=-2dy,deta2=-2dx-2dy。
  3. 将点(x,y)存入数组
  4. 判断x是否小于x2,如果x
  5. 如果d>=0,则x=x+1,y=y-1,d=d+deta2;否则x=x+1,y不变,d=d+deta1
  6. 将点(x,y)存入数组,并转入步骤(4)

3.在k>1时的中点画线算法:

  1. 输入直线的起点(x1,y1),(x2,y2)
  2. 初始化,计算出dx=x2-x1,dy=y2-y1,d=2dx-dy,x=x1,y=y1

你可能感兴趣的:(计算机图形学实验/作业,c++,计算机图形学)