中点Bresenham算法光栅化画圆(八分法)

代码如下,原理对比上篇画直线方法

void Bresenham_Circle(CDC *pDC, int ox, int oy, int r)
{
	float d = 1.25 - r;
	int x = 0, y = r, fx = r/1.4;
	while (x != fx)
	{
		if (d < 0)
			d += 2 * x + 3;
		else
		{
			d += 2 * (x - y) + 5;
			--y;
		}
		pDC->SetPixel(ox + x, oy + y, RGB(0, 0, 255));
		pDC->SetPixel(ox + x, oy - y, RGB(0, 0, 255));
		pDC->SetPixel(ox - x, oy + y, RGB(0, 0, 255));
		pDC->SetPixel(ox - x, oy - y, RGB(0, 0, 255));
		pDC->SetPixel(ox + y, oy - x, RGB(0, 0, 255));
		pDC->SetPixel(ox + y, oy + x, RGB(0, 0, 255));
		pDC->SetPixel(ox - y, oy + x, RGB(0, 0, 255));
		pDC->SetPixel(ox - y, oy - x, RGB(0, 0, 255));
		++x;
	}
}
时间: 2024-10-08 13:37:41

中点Bresenham算法光栅化画圆(八分法)的相关文章

中点Bresenham算法光栅化画直线(个人总结精简版)代码超短!速度极快!

中点Bresenham算法光栅化画直线,每次只位移一个像素,精度高!此源码借助直线 y=x 做了一些转换,简化了主位移的处理,每次移动只需要 加减操作, 不需要乘除!速度极快!! 原理在最后,下面先贴上核心代码~ void Bresenham_LineTo(CDC *pDC, int x1, int y1, int x2, int y2) //中点Bresenham算法光栅化画直线 { float k = 1.0*(y2 - y1) / (x2 - x1); //斜率 int flag = 0;

中点Bresenham算法光栅化画椭圆(四分法)

void Bresenham_Ellipse(CDC *pDC, int ox, int oy, int a, int b)//圆心x,圆心y,横长,纵长 { float d = b*b + a*a*(-b + 0.25); int x = 0, y = b, fx = a*a / sqrt((float)a*a + b*b); while (x != fx) { if (d < 0) d += b*b*(2 * x + 3); else { --y; d += b*b*(2 * x + 3)

《图形学》实验六:中点Bresenham算法画圆

开发环境: VC++6.0,OpenGL 实验内容: 使用中点Bresenham算法画圆. 实验结果: 代码: 1 #include <gl/glut.h> 2 3 #define WIDTH 500 4 #define HEIGHT 500 5 #define OFFSET 15 6 #define R 8 7 8 void Init() //其它初始化 9 { 10 glClearColor(1.0f,1.0f,1.0f,1.0f); //设置背景颜色,完全不透明 11 glColor3f

《图形学》实验七:中点Bresenham算法画椭圆

开发环境: VC++6.0,OpenGL 实验内容: 使用中点Bresenham算法画椭圆. 实验结果: 代码: 1 #include <gl/glut.h> 2 3 #define WIDTH 500 4 #define HEIGHT 500 5 #define OFFSET 15 //偏移量,偏移到原点 6 #define A 6 7 #define B 5 8 9 void Init() //其它初始化 10 { 11 glClearColor(1.0f,1.0f,1.0f,1.0f);

《图形学》实验四:中点Bresenham算法画直线

开发环境: VC++6.0,OpenGL 实验内容: 使用中点Bresenham算法画直线. 实验结果: 代码: 1 //中点Bresenham算法生成直线 2 #include <gl/glut.h> 3 #include <math.h> 4 5 #define WIDTH 500 //窗口宽度 6 #define HEIGHT 500 //窗口高度 7 #define DRAWLINE1 MidpointBresenham(100,200,200,100); //画直线 8

「图形学」直线扫描——Bresenham算法改进了中点Bresenham算法?

前言 博主目前在学习<计算机图形学基础>这本书,使用的是第二版. 此书第五章开始讲解基本图形生成算法. 在5.1.3 Bresenham算法中,如是写到: 虽然中点Bresenham算法是一种效率非常高的算法,但也还有改进的余地. 而后,开始介绍Bresenham算法. 思考 然而通过学习和理解,博主发现这两种算法的原理完全相同: 每次在最大位移方向上走一步,而另一个方向上走步还是不走步取决于误差项的判别. 于是博主产生了疑问: Bresenham算法真的改进了中点Bresenham算法吗?

OpenGL光栅化作业:【bresenham算法】GL_POINTS为基础画线段

首先来看一下题目要求: 2.2 Draw a Line Implement your line rasterization algorithm in OpenGL. You can only use integer arithmetic in your code. Input: 2 2D points, that makes 4 integers, as a start point and an end point Output: A straight line in a window You

《图形学》实验五:改进的Bresenham算法画直线

开发环境: VC++6.0,OpenGL 实验内容: 使用改进的Bresenham算法画直线. 实验结果: 代码: 1 //中点Bresenham算法生成直线 2 #include <gl/glut.h> 3 #include <math.h> 4 5 #define WIDTH 500 //窗口宽度 6 #define HEIGHT 500 //窗口高度 7 #define DRAWLINE ProBresenham(100,100,400,400); //画直线 8 9 #pr

直线的中点Bresenham算法的实现

---恢复内容开始--- 一.实验目的 1.掌握在MFC中搭建图形绘制的基本框架的方法: 2.将直线的中点Bresenham算法转化成可执行代码. 二.实验内容 1. 通过分析具体数据在中点Bresenham算法上的执行过程,绘制算法执行流程图或N-S图,在MFC中实现该算法,要求编写函数实现任意给定两点绘制线段. 三.实验步骤 任意给定的两点所绘制的线段斜率k可能有四种情况,分别是:0<k<1,k>=1,-1<k<0, k<=-1.下面对这四种情况分别进行分析. (一