本文主要是介绍头歌实践教学平台:CG1-v2.0-直线绘制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
第2关:直线光栅化-中点画线算法
一.任务描述
1.本关任务
(1)根据直线中点画线算法补全line函数,其中直线斜率0<k<1,并将main函数中的line函数参数补充完整; (2)当直线方程恰好经过P(x,y)和T(x,y+1)的中点M时,统一选取直线上方的T点为显示的像素点。
2.输入
(1)直线两端点坐标:(100, 100)和(520,300); (2)直线颜色为红色。
3.输出
程序运行结果为一条直线,具体结果如下图所示:
二.相关知识
1.绘制点函数
image.set(x, y, color)函数是绘制点的函数,参数包括x、y和color。参数x为绘制点的x坐标,参数y为绘制点的y坐标,参数color为绘制点的颜色。
2.中点画线算法
中点画线算法相关知识点,请参考教材与课件或有关资料。
三.操作说明
(1)按要求补全line函数; (2)点击窗口右下角"测评"按钮,等待测评结果,如果通过后可进行下一关任务。
开始你的任务吧,祝你成功!
四、实验代码
#include "tgaimage.h"const TGAColor white = TGAColor(255, 255, 255, 255);
const TGAColor red = TGAColor(255, 0, 0, 255);void line(int x0, int y0, int x1, int y1, TGAImage &image, TGAColor color)
{// Please add the code here/********** Begin ********/int b, a, d, d1, d2, x, y;b = x1-x0;a = y1-y0;d =2*a+b; d1 =2*a; d2 =2*a+2*b; y=y0;for(x=x0;x<x1;x++){image.set(x,int(y+0.5),color);if (d < 0){y++;d += d2;}else{d += d1;}}/********** End *********/
}int main(int argc, char** argv)
{TGAImage image(640,480, TGAImage::RGB);// Please add the code here/********** Begin ********/line(100,100,520,300, image, white);/********** End *********/image.flip_vertically(); // i want to have the origin at the left bottom corner of the imageimage.write_tga_file("../img_step4/test.tga");return 0;
}
这篇关于头歌实践教学平台:CG1-v2.0-直线绘制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!