当前位置:   article > 正文

头歌实践教学平台:CG1-v2.0-直线绘制

头歌实践教学平台: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.输出

程序运行结果为一条直线,具体结果如下图所示:

test

二.相关知识

1.绘制点函数

image.set(x, y, color)函数是绘制点的函数,参数包括x、y和color。参数x为绘制点的x坐标,参数y为绘制点的y坐标,参数color为绘制点的颜色。

2.中点画线算法

中点画线算法相关知识点,请参考教材与课件或有关资料。

三.操作说明

(1)按要求补全line函数; (2)点击窗口右下角"测评"按钮,等待测评结果,如果通过后可进行下一关任务。


开始你的任务吧,祝你成功!

四、实验代码

  1. #include "tgaimage.h"
  2. const TGAColor white = TGAColor(255, 255, 255, 255);
  3. const TGAColor red = TGAColor(255, 0, 0, 255);
  4. void line(int x0, int y0, int x1, int y1, TGAImage &image, TGAColor color)
  5. {
  6. // Please add the code here
  7. /********** Begin ********/
  8. int b, a, d, d1, d2, x, y;
  9. b = x1-x0;
  10. a = y1-y0;
  11. d =2*a+b;
  12. d1 =2*a;
  13. d2 =2*a+2*b;
  14. y=y0;
  15. for(x=x0;x<x1;x++)
  16. {
  17. image.set(x,int(y+0.5),color);
  18. if (d < 0)
  19. {
  20. y++;
  21. d += d2;
  22. }
  23. else
  24. {
  25. d += d1;
  26. }
  27. }
  28. /********** End *********/
  29. }
  30. int main(int argc, char** argv)
  31. {
  32. TGAImage image(640,480, TGAImage::RGB);
  33. // Please add the code here
  34. /********** Begin ********/
  35. line(100,100,520,300, image, white);
  36. /********** End *********/
  37. image.flip_vertically(); // i want to have the origin at the left bottom corner of the image
  38. image.write_tga_file("../img_step4/test.tga");
  39. return 0;
  40. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/556314
推荐阅读
相关标签
  

闽ICP备14008679号