码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 直线段扫描算法


    第一个是DDA直线扫描算法,其基本思想是根据直线的点斜式来实现

    第二个是重点画线算法,其基本思想是直线的一般方程ax+by+c=0

    第三个是Bresenham算法

    三个算法的共同特点是都使用了增量的思想

    1. #include
    2. #include
    3. void DDAlien(int x1, int y1, int x2, int y2)
    4. {
    5. int x;
    6. float dx, dy,k,y;
    7. dy = y2 - y1;
    8. dx = x2 - x1;
    9. k = dy / dx;
    10. y = y1;
    11. glBegin(GL_POINTS);
    12. for (x = x1; x <= x2; x++)
    13. {
    14. //drawPixels(x, int(y + 0.5), color);
    15. glColor3i(1, 0, 0);
    16. glVertex2i(x, int(y + 0.5));
    17. y = y + k;
    18. }
    19. glEnd();
    20. }
    21. void MidpointLine(int x1, int y1, int x2, int y2)
    22. {
    23. int a, b, d1, d2, d, x, y;
    24. a = y1 - y2;
    25. b = x2 - x1;
    26. d = 2 * a + b;
    27. d1 = a * 2;
    28. d2 = 2 * (a + b);
    29. x = x1;
    30. y = y1;
    31. glBegin(GL_POINTS); // 开始绘制线段
    32. // 画线
    33. glColor3i(255, 0, 0);
    34. glVertex2i(x, y);
    35. while (x <= x2)
    36. {
    37. if (d < 0)
    38. {
    39. // 画线 (x++,y++)
    40. x++;
    41. y++;
    42. d += d2;
    43. }
    44. else
    45. {
    46. // 画线(x++,y)
    47. x++;
    48. d += d1;
    49. }
    50. // 画线
    51. glColor3i(255, 0, 0);
    52. glVertex2i(x, y);
    53. }
    54. glEnd(); // 结束绘制线段
    55. }
    56. // 用整数代理浮点数运算提高效率
    57. void BresenHamline(int x1, int y1, int x2, int y2)
    58. {
    59. glBegin(GL_POINTS);
    60. int x, y, dx, dy, e;
    61. dx = x2 - x1;
    62. dy = y2 - y1;
    63. e = -dx;
    64. x = x1;
    65. y = y1;
    66. while (x <= x2)
    67. {
    68. glColor3i(255, 0, 0);
    69. glVertex2i(x, y);
    70. x++;
    71. e += 2 * dy;
    72. if (e >= 0)
    73. {
    74. y++;
    75. e = e - 2 * dx;
    76. }
    77. }
    78. glEnd();
    79. }
    80. void myDisplay(void)
    81. {
    82. glClearColor(1.0, 1.0, 1.0, 1.0); // 设置清除颜色为白色
    83. glClear(GL_COLOR_BUFFER_BIT);
    84. //glRectf(-0.5f, -0.5f, 0.5f, 0.5f);
    85. //DDAlien(0,0,100,100,1);
    86. //MidpointLine(100, 100, 300, 300);
    87. BresenHamline(100, 100, 300, 300);
    88. glFlush();
    89. }
    90. int main(int argc, char* argv[])
    91. {
    92. glutInit(&argc, argv);
    93. glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
    94. glutInitWindowPosition(100, 100);
    95. glutInitWindowSize(400, 400);
    96. glutCreateWindow("第一个OpenGL程序");
    97. glutDisplayFunc(&myDisplay);
    98. glMatrixMode(GL_PROJECTION);
    99. glLoadIdentity();
    100. glOrtho(0, 400, 0, 400, -1, 1); // 设置投影矩阵
    101. glMatrixMode(GL_MODELVIEW);
    102. glutMainLoop();
    103. return 0;
    104. }

  • 相关阅读:
    流程系统的设计与实现
    springboot 项目启动检查创建数据库,执行脚本,以及初始化数据源
    (附源码)SSM介绍信智能实现系统 毕业设计 260930
    Docker:docker部署Nginx
    Vue事件机制和事件修饰符
    【渗透攻防】千变万化的WebShell
    为何互联网大厂都在采用蓝绿发布、滚动发布、灰度发布?
    ChatGPT的发展,是否会有越来越多的人失业?
    Python零基础入门篇 · 21】:构造函数、类属性和实例属性的访问
    研究 | CT图像迭代重建算法研究进展
  • 原文地址:https://blog.csdn.net/weixin_68798281/article/details/134000256
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号