Bresenham 中点画圆算法实现
来源:互联网 发布:如何查淘宝买家信誉 编辑:程序博客网 时间:2024/05/20 20:05
在此记录Bresenham 中点画圆算法,下面直接给出步骤与算法,步骤从计算机图形学一书中截取的,此算法原理在此不做说明,可自行查看计算机图形学一书相关描述。
一、步骤描述
二、代码实现,以OC为开发语言
//以点为类的头文件@interface ScreenPT : NSObject{ GLint x,y;}@property (nonatomic,assign) GLint x;@property (nonatomic,assign) GLint y;-(void) setCoordX:(GLint)x Y:(GLint)y;-(void) incrementX;-(void) decrementY;@end//类的实现文件#import "ScreenPT.h"@implementation ScreenPT@synthesize x;@synthesize y;-(id) init{ if (self = [super init]) { x = 0; y = 0; } return self;}-(void) setCoordX:(GLint)x Y:(GLint)y{ self.x = x; self.y = y;}-(void) incrementX{ self.x++;}-(void) decrementY{ self.y--;}@end//实现文件及相关辅助方法void setPixel(GLint x,GLint y){ glBegin(GL_POINTS); glVertex2i(x, y); glEnd();}//MARK: Bresenham 中点画圆算法void circleMidpoint(){ GLint xc = 100,yc = 100,radius = 30;//圆心与半径 ScreenPT* spt = [[ScreenPT alloc] init]; GLint p = 1 - radius; [spt setCoordX:0 Y:radius]; glClear(GL_COLOR_BUFFER_BIT); glColor3f(0.5, 1.0, 0.0); void circlePlotPoints(GLint,GLint,ScreenPT*); circlePlotPoints(xc, yc, spt); while (spt.x < spt.y) { [spt incrementX]; if (p < 0) { p += 2 * spt.x + 1; } else { [spt decrementY]; p += 2 * (spt.x - spt.y) + 1; } circlePlotPoints(xc, yc, spt); } glFlush();}void circlePlotPoints(GLint xc,GLint yc,ScreenPT* spt){ setPixel(xc + spt.x, yc + spt.y); setPixel(xc - spt.x, yc + spt.y); setPixel(xc + spt.x, yc - spt.y); setPixel(xc - spt.x, yc - spt.y); setPixel(xc + spt.y, yc + spt.x); setPixel(xc - spt.y, yc + spt.x); setPixel(xc + spt.y, yc - spt.x); setPixel(xc - spt.y, yc - spt.x);}
三、效果图
0 0
- Bresenham 中点画圆算法实现
- Bresenham画圆算法 与中点画圆法
- 圆生成算法(中点画圆、Bresenham画圆)
- 【计算机图形学】中点画圆算法和Bresenham画圆算法
- 中点画圆算法的实现
- 中心点画圆算法 实现
- opencv中使用中点画圆算法
- 圆生成算法---中点画圆法
- 计算机图形学:中点画圆算法
- 中点画椭圆算法
- 中点画直线算法
- 用OpenGL实现 中点画圆法
- 中心点画圆算法
- 圆的Bresenham算法的opengL实现
- Bresenham算法opencv实现
- erlang实现bresenham算法
- Bresenham算法实现
- 中点画圆法
- RTMP发送H264及AAC的音视频
- svn merge本质和用法
- 12 个 CSS 高级技巧汇总
- 当我们向下兼容2.2系统的时候出现'Theme.Base.AppCompat.Dialog.FixedSize'错误的解决办法
- java核心技术之IO流(五)BufferedReader和BufferedWriter
- Bresenham 中点画圆算法实现
- shell中如何判断两个字符串相等
- redhat6.4 安装FastDFS5.03、5.05
- 第一天开通,记录下ueditor的大小设置
- popwindow 位置和动画
- leetcode31:Next Permutation
- 设计模式笔记——装饰者模式
- hibernate 注解@Formula解析和使用简介
- JAVA开发学习第一节--IDEA工具