基本原理

在画直线段的过程中,当前像素点为(xp ,yp ),下一个像素点有两种可选择点P1(xp +1,yp )或P2(xp +1,yp +1)。若M=(xp +1,yp +0.5)为P1与P2之中点,Q为P理想直线与x=xp +1垂线的交点。当M在Q的下方,则P2应为下一个像素点;M在Q的上方,应取P1为下一个像素点。

在斜率0<=k<=1的时候,实现代码如下(书本代码):

void MidpointLine(

int x0,

int y0,

int x1,

int y1,

int color)

{

int a,b,d1,d2,d,x,y;

a=y0-y1,b=x1-x0,d=2*a+b;

d1=2*a,d2=2*(a+b);

x=x0,y=y0;

Drawpixel(x,y,color);

while (x

{

if (d<0)

{    x++,y++,d+=d2;}

else

{    x++,d+=d1;    }

Drawpixel(x,y,color);

}

}

对于其他斜率,我们可以推出如下关系:

实现代码如下:

void MidpointLine(int x0,int y0,int x1,int y1,int color) { int a,b,d1,d2,d,x,y;float m;if (x1=0 && m<=1) {d=2*a+b;d1=2*a,d2=2*(a+b); while (x=-1) {d=2*a-b;d1=2*a-2*b,d2=2*a; while (x0) { x++,y--,d+=d1;} else { x++,d+=d2; } Drawpixel(x,y,color); } } else if (m>1) {d=a+2*b;d1=2*(a+b),d2=2*b; while (y0) { x++,y++,d+=d1;} else { y++,d+=d2; } Drawpixel(x,y,color); } } else {d=a-2*b;d1=-2*b,d2=2*(a-b); while (y>y1) { if (d<=0) { x++,y--,d+=d2;} else { y--,d+=d1; } Drawpixel(x,y,color); }} }

备注:Drawpixel(x,y,color);是pDC->SetPixel(x,y,crColor);的意思

中点画线完整算法c语言,中点画线算法(任意斜率)相关推荐

  1. c语言中申请内存并初始化,c语言中结构体的定义、初始化及内存分配

    #include struct person { char *name; int age; }; int main() { //结构体可以定义在函数内,也可以定义到函数外 //相当于全局变量与局部变量 ...

  2. c语言中有关随机数的程序,C语言中随机数相关问题

    用C语言产生随机数重要用到rand函数.srand函数.及宏RAND_MAX(32767),它们均在stdlib.h中进行了声明. int rand(void);//生成一个随机数 voidsrand ...

  3. Algorithm:C++语言实现之概率算法相关问题(计算机中的概率事件、C语言中的随机事件、产生二维随机数、圆内均匀取点)

    Algorithm:C++语言实现之概率算法相关问题(计算机中的概率事件.C语言中的随机事件.产生二维随机数.圆内均匀取点) 目录 一.概率 1.计算机中的概率事件 1.1.C语言中的随机事件 1.2 ...

  4. A13在c语言中是合法变量吗,C语言中局部变量和全局变量等在内存中的存放位置.doc-资源下载在线文库www.lddoc.cn...

    C语言中局部变量和全局变量_等在内存中的存放位置.doc C 语言中局部变量和全局变量 变量的存储类别static,extern,auto,register 8.8 局部变量和全局变量在讨论函数的形参 ...

  5. c语言中调整颜色的函数_C语言中的输入输出函数

    点击上方"学士科技",选择"设为星标" 技术干货第一时间送达! 01 字符数据输入输出 字符数据输出函数putchar() C语言中字符数据输出使用的是putc ...

  6. c语言中栈堆,全程剖析C语言中堆和栈的区别

    C语言中堆和栈的区别 1.申请方式 (1)栈(satck):由系统自动分配.例如,声明在函数中一个局部变量int b;系统自动在栈中为b开辟空间. (2)堆(heap):需程序员自己申请(调用mall ...

  7. c语言中占位符,Java C# C语言中的占位符

    一般拼接一段字符串在编程中是很常见的事,下面简单做个总结: 什么是占位符?占位符就是先占住一个固定的位置,等着你再往里面添加内容的符号. 1.Java中处理方法: package com.amos; ...

  8. 妙趣横生的算法(c语言实现),妙趣横生的算法(C++语言实现) 带目录完整pdf[4MB]

    <妙趣横生的算法(C++语言实现)>内容丰富,生动有趣,寓教于乐,旨在帮助读者学习数据结构和算法的相关知识,从而开阔眼界,培养编程兴趣,提高编程能力,增强求职的竞争力.如果您想提高自己对算 ...

  9. c语言中非法使用void类型_C语言中的数据类型

    为什么需要介绍数据类型 学习语言编程,不用急着写代码,先搞懂基本概念.有了基本概念后,然后再考虑在不同的语言中是如何表达的.不同语言无非就是表达方式不一样而已,万变不离其宗. 每一门语言开始部分中总是 ...

  10. c语言中指针的类型,学习C语言中的指针类型

    摘要:结合我院学生十年来参加全国计算机等级考试(C语言部分)情况,通过分析成绩分布与题型关系,我们发现指针方面的题型失分率最高.在此基础上结合教学实际,本文提出学习指针知识的方法和顺序过程,并将其应用 ...

最新文章

  1. 这 HTTPS,真滴牛逼!
  2. 刚刚,2021年诺贝尔生理学或医学奖揭晓!
  3. 网络编程 -- RPC实现原理 -- RPC -- 迭代版本V4 -- 远程方法调用 整合 Spring 自动注册...
  4. LOGO设计价格 之 全面解说和如何选择 【原创】
  5. LevelDB (1)概述
  6. linux常用网络诊断命令,linux网络常用诊断工具
  7. 【机器学习】从Few-shot Learning再次认识机器学习
  8. P3128 [USACO15DEC]最大流Max Flow
  9. error_reporting
  10. 单体多字系统以及多体并行系统
  11. 思科命令 service password-encryption
  12. 看漫画学python_《看漫画学Python:有趣、有料、好玩、好用(全彩版)(博文视点出品)》(关东升)【摘要 书评 试读】- 京东图书...
  13. 如何写一个NB的商业计划书
  14. 打开cad图纸计算机打不开,cad打不开_CAD图纸打开未响应怎么解决
  15. Excel 技巧大全之 01 如何将公式应用于 Excel 中的整列(5 种简单方法)
  16. 为何最近我们日子会很难过 之 第一篇
  17. iPad——添加学校邮箱到邮件解决方案
  18. 如何删除ie浏览器缓存文件、缓存js
  19. 以时间作为文件名的后缀
  20. java坦克大战案例_JAVA实现经典坦克大战源代码

热门文章

  1. Hi35xx视频编解码器
  2. from用法 prepare_mysql 语句传参数 -- prepare语句的用法
  3. 放开chrome,微度新标签页 删除
  4. iOS_SpriteKit_02_SpriteKit编程指南
  5. oracle寻找第一条数据,oracle 获取第一条数据
  6. Python图形绘制
  7. vnc view安装与使用
  8. 有序列表无序列表自定义列表
  9. Ghost系统的危害
  10. VUE:No PostCSS Config found 解决