- 博客(0)
- 资源 (14)
- 收藏
- 关注
Bresenham直线算法与画圆算法
Bresenham直线算法与画圆算法
作者: oldj | 链接: http://oldj.net/article/bresenham-algorithm/
上一篇| 下一篇
在我们内部开发使用的一个工具中,我们需要几乎从 0 开始实现一个高效的二维图像渲染引擎。比较幸运的是,我们只需要画直线、圆以及矩形,其中比较复杂的是画直线和圆。画直线和圆已经有非常多的成熟的算法了,我们用的是Bresenham的算法。
计算机是如何画直线的?简单来说,如下图所示,真实的直线是连续的,但我们的计算机显示的精度有限,不可能真正显示连续的直线,于是我们用一系列离散化后的点(像素)来近似表现这条直线。
2012-06-19
10种滤波算法_及_例子c代码
1、限幅滤波法(又称程序判断滤波法)2、中位值滤波法3、算术平均滤波法4、递推平均滤波法(又称滑动平均滤波法)5、中位值平均滤波法(又称防脉冲干扰平均滤波法)6、限幅平均滤波法7、一阶滞后滤波法8、加权递推平均滤波法9、消抖滤波法10、限幅消抖滤波法11、IIR滤波???假定从8位AD中读取数据(如果是更高位的AD可定义数据类型为int),子程序为get_ad();1、限幅滤波法(又称程序判断滤波法)A、方法: 根据经验判断,确定两次采样允许的最大偏差值(设为A) 每次检测到新值时判断: 如果本次值与上次值之差<=A,则本次值有效 如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值B、优点: 能有效克服因偶然因素引起的脉冲干扰C、缺点 无法抑制那种周期性的干扰 平滑度差eg.#define A 10char value;char filter(){ char new_value; new_value = get_ad(); if ((new_value - value > A) || (value - new_value > A)) return value; return new_value; }2、中位值滤波法A、方法:
2012-05-29
状态机做独立按键检测 连发
人机界面最重要的就是按键了,觉得按键做的最好的就是手机的按键了,有长按、敌探、连发等功能。还有组合等。一个好的按键程序用书本上学的按键检测方法已 经不能适应工程的需要了,为此人们设计出一种状态机检测按键的方法。 在一个系统中按键是随机的,因此系统软件对按键要一直循环查询,由于按键检测过程需要进行消抖处理,因此取状态机的时间序列为10ms,这样不仅可以跳过 按键抖动的影响,同时也小于0.3-0.5秒的稳定闭合期,不会将按键的操作过程丢失。 程序实现方法,用定时器定时10ms,每隔10ms检测一次按键,将一个按键的检测过程分为几个不同的状态,最简单的分为 初使状态-按键闭合确认状态-按键释放状态,如果要求按键实现的功能越多,状态也就越多 ,比如还有常用的长按状态。以下是一个状态机按键程序,仅供参考。 程序基于AVR单片机, key.h文件的一部分
#define KEY0_PORT PORTD
#define KEY0_DDR DDRD
#define KEY0_PIN PIND
#define KEY0 PD0
#define KEY1_PORT PORTD
#define KEY1_DDR DDRD
#define KEY1_PIN PIND
#define KEY1 PD1
#define KEY2_PORT PORTD
#define KEY2_DDR DDRD
#define KEY2_PIN PIND
#define KEY2 PD2
#define KEY3_PORT PORTD
#define KEY3_DDR DDRD
#define KEY3_PIN PIND
2012-05-29
诺基亚5110LCD
// Define I/O pins
#define BIT7 0x80
#define BIT6 0x40
#define BIT5 0x20
#define BIT4 0x10
#define BIT3 0x08
#define BIT2 0x04
#define BIT1 0x02
#define BIT0 0x01
#define LCD_PORT PORTA
#define LCD_DIR DDRA
#define LCD_IN PINA
#define SCLK BIT4
#define SDIN BIT3
#define LCD_DC BIT2
#define LCD_CE BIT1
#define LCD_RST BIT0
//enable global interrupts
#define GIE (SREG |= BIT(7))
//disable global interrupts
#define GID (SREG &= ~BIT(7))
#define SLEEP() asm("sleep")
/* enables an unsigned char to be used as a series of booleans */
#define BIT(x) (1 << (x))
#define SETBIT(x, y) (x |= y)
#define CLEARBIT(x, y) (x &= ~y)
#define CHECKBIT(x, y) (x & y)
#define true 1
#define True 1
#define false 0
#define False 0
unsigned char AVR_bmp[]=
2012-04-20
proteus常用元件中英文对照
AND 与门
ANTENNA 天线
BATTERY 直流电源
BELL 铃,钟
BVC 同轴电缆接插件
BRIDEG 1 整流桥(二极管)
BRIDEG 2 整流桥(集成块)
BUFFER 缓冲器
BUZZER 蜂鸣器
CAP 电容
CAPACITOR 电容
CAPACITOR POL 有极性电容
CAPVAR 可调电容
CIRCUIT BREAKER 熔断丝
COAX 同轴电缆
CON 插口
CRYSTAL 晶振
DB 并行插口
DIODE 二极管
DIODE SCHOTTKY 稳压二极管
DIODE VARACTOR 变容二极管
DPY_3-SEG 3段LED
DPY_7-SEG 7段LED
DPY_7-SEG_DP 7段LED(带小数点)
ELECTRO 电解电容
FUSE 熔断器
INDUCTOR 电感
INDUCTOR IRON 带铁芯电感
INDUCTOR3 可调电感
JFET N N沟道场效应管
JFET P P沟道场效应管
LAMP 灯泡
LAMP NEDN 起辉器
LED 发光二极管
METER 仪表
MOSFET MOS管
MOTOR AC 交流电机
MOTOR SERVO 伺服电机
NAND 与非门
NOR 或非门
NOT 非门
NPN NPN三极管
NPN-PHOTO 感光三极管
OPAMP 运放
2012-04-20
诺基亚 5110 四行汉字
诺基亚 5110 四行汉字
由图可知,由于 5110 是按字节写的,但是 12X12 的汉字需要 1.5 个字节,在 x 方向上没有问题,在 Y 方向上就会
出现 4 位的空白,而下行字又直接写到整字节上,造成了一个 4 位宽的行间距。我的解决方案是,在写 0、3 行的
时候,将他们的下半区 8 位存入数组中,当写 2、5 行的时候,将 2、5 行的上半区下移 4 位和 0、3 行写入时保存
的下半区内容或操作再写进 1、4 行,将 2、5 行的上半区上移 4 何 2、5 行的下版
2012-04-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人