巴特西
首页
Python
Java
PHP
IOS
Andorid
NodeJS
JavaScript
HTML5
Bresenham画圆算法
Bresenham直线算法与画圆算法
在我们内部开发使用的一个工具中,我们需要几乎从 0 开始实现一个高效的二维图像渲染引擎.比较幸运的是,我们只需要画直线.圆以及矩形,其中比较复杂的是画直线和圆.画直线和圆已经有非常多的成熟的算法了,我们用的是Bresenham的算法. 计算机是如何画直线的?简单来说,如下图所示,真实的直线是连续的,但我们的计算机显示的精度有限,不可能真正显示连续的直线,于是我们用一系列离散化后的点(像素)来近似表现这条直线. (上图来自于互联网络,<计算机图形学的概念与方法>柳朝阳,郑州大学数学系) 接下来的
中点Bresenham画圆
这里不仔细讲原理,只是把我写的算法发出来,跟大家分享下,如果有错误的话,还请大家告诉我,如果写的不好,也请指出来,一起讨论进步. 算法步骤: (1) 输入圆的半径R. (2) 计算初始值d = 1 - R, x = 0; y = R. (3) 绘制点(x, y), 及其在八分圆中的另外7个对称点. (4) 判断d的符号,若d < 0, 则先将d更新为d+2*x+3,再将(x,y)更新为(x+1, y),否则将d更新为d+2*(x - y) + 5,再将(x, y)更新为(x+1, y-1).
Bresenham画线算法
[Bresenham画线算法] Bresenham是一种光栅化算法.不仅可以用于画线,也可以用用画圆及其它曲线. 通过lower与upper的差,可以知道哪一个点更接近线段: 参考:<计算机图形学>3.5.3 Bresenham画线算法
Bresenham画椭圆算法
这里不仔细讲原理,只是把我写的算法发出来,跟大家分享下,如果有错误的话,还请大家告诉我,如果写的不好,也请指出来,一起讨论进步. 算法步骤: (1) 输入椭圆的长半轴a和短半轴b. (2) 计算初始值d = b*b + a * a * (-b + 0.25), x = 0, y = b. (3) 绘制点 (x, y)及其在四分象限上的另外3个对称点. (4) 判断d的符号.若d <= 0,则先将d更新为d + b * b * (2 * x + 3),再将 (x, y)更新为(x+1, y):否
中点Brehensam画圆算法
#include<stdio.h> #include<stdlib.h> #include<graphics.h> #include<math.h> void MidBrehansemCircle(int x, int y, int radius); int main() { int gdriver = DETECT, gmove; int x, y, radius; printf("Please input circle corner:\n&qu
《图形学》实验六:中点Bresenham算法画圆
开发环境: VC++6.0,OpenGL 实验内容: 使用中点Bresenham算法画圆. 实验结果: 代码: #include <gl/glut.h> #define WIDTH 500 #define HEIGHT 500 #define OFFSET 15 #define R 8 void Init() //其它初始化 { glClearColor(1.0f,1.0f,1.0f,1.0f); //设置背景颜色,完全不透明 glColor3f(1.0f,0.0f,0.0f); //设置画笔
基于Bresenham算法画圆
bresenham算法画圆思想与上篇 bresenham算法画线段 思想是一致的 画圆x^2+y^2=R^2 将他分为8个部分,如上图 1. 只要画出1中1/8圆的圆周,剩下的就可以通过对称关系画出这个圆 X变化从0->R 那为什么不采用从-R->R呢, Y=+-sqrt(R^2-x^2); dy/dx=-x/(sqrt(R^2-x^2)) =-x/y 所以采用从-R到R,每次横坐标增1,计算量大,而且在(x=+-R,y=0)处,x的很小变化就引起了y的很大变化. 所以不是采用x从-R---&
计算机图形学(二)输出图元_6_OpenGL曲线函数_2_中点画圆算法
中点画圆算法 如同光栅画线算法,我们在每一个步中以单位间隔取样并确定离指定圆近期的像素位置.对于给定半径r和屏幕中心(xc,yc),能够先使用算法计算圆心在坐标原点(0, 0)的圆的像素位置,然后通过将xc加到x且yc加到y.从而把计算出的每一个位置(x,y)移动到其适当的屏幕位置.在第一象限中,圆弧段从x = 0到x = y,曲线的斜率从0变化到-1.0. 因此,能够在该八分圆上的正x方向取单位步长.并使用决策參数来确定每一步两个可能的y位置中,哪一个更接近于圆的位置.然后,其它
Bresenham画直线,任意斜率
function DrawLineBresenham(x1,y1,x2,y2) %sort by x,sure x1<x2. if x1>x2 tmp=x1; x1=x2; x2=tmp; tmp=y1; y1=y2; y2=tmp; end dx=x2-x1; dy=y2-y1; twoDy=2*dy; twoDy_Dx=2*(dy-dx); twoDx=2*dx; twoDx_Dy=2*(dx-dy); twoDxPlusDy=2*(dx+dy); %branch 1: k>0 ?
两种画线算法(DDA&;Bersenham)
DDA(digital differential analyzer) 由直线的斜截式方程引入 对于正斜率的线段,如果斜率<=1,则以单位x间隔(δx=1)取样,并逐个计算每一个y值 Yk+1 = Yk + m (m为由初始点确定的斜率) 对于斜率>1的线段 Xk+1 = Xk + 1/m (m为由初始点确定的斜率) 起始端点在于右侧时 "+" -> "-" #include "stdlib.h" #include &qu
计算机图形学DDA画线法+中点画线法+Bresenham画线法
#include <cstdio> #include <cstring> #include <conio.h> #include <graphics.h> void line1(){ line(100, 100, 200, 400); line(100, 400, 200, 100); line(0, 200, 300, 300); line(0, 300, 300, 200); } void lineDDA(int x0, int y0, int x1,
【转】【OPenGL】OPenGL 画图板-- 中点算法画圆
为了能以任意点为圆心画圆,我们可以把圆心先设为视点(相当于于将其平移到坐标原点),然后通过中点法扫描转换后,再恢复原来的视点(相当于将圆心平移回原来的位置). 圆心位于原点的圆有四条对称轴x=0,y=0,x=y和x=-y,从而圆上一点(x,y),可得到其关于四条对称轴的七个对称点,这称为八对称性,下面的函数就用来显示(x,y)及其七个对称点. void CirclePoints(int x,int y,long color,CDC *pDC) { //第1象限 pDC->SetPixel(x,y
Bresenham快速画直线算法
现在的计算机的图像的都是用像素表示的,无论是点.直线.圆或其他图形最终都会以点的形式显示.人们看到屏幕的直线只不过是模拟出来的,人眼不能分辨出来而已.那么计算机是如何画直线的呢,其实有比较多的算法,这里讲的是Bresenham的算法,是光栅化的画直线算法.直线光栅化是指用像素点来模拟直线,比如下图用蓝色的像素点来模拟红色的直线. 给定两个点起点P1(x1, y1), P2(x2, y2),如何画它们直连的直线呢,即是如何得到上图所示的蓝色的点.假设直线的斜率0<k>0,直线在第一象限,Bres
WebGIS中基于AGS的画圆查询简析以及通过Polygon来构造圆的算法
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 某个项目需求中需要在前端进行画圆查询,将圆范围上的多边形要素在前端进行展示.因为此项目的环境是AGS环境,考虑使用AGS的I查询来完成. 2.I查询的相关参数介绍 I查询中主要涉及到如下几个参数:geometry.geometryType.layerDefs.layers.tolerance.mapExtent.imageDisplay等. 2.1理解相对简
[计算机图形学] 基于C#窗口的Bresenham直线扫描算法、种子填充法、扫描线填充法模拟软件设计(二)
上一节链接:http://www.cnblogs.com/zjutlitao/p/4116783.html 前言: 在上一节中我们已经大致介绍了该软件的是什么.可以干什么以及界面的大致样子.此外还详细地介绍了Bresenham直线扫描算法的核心思想及实现,并在最终在2-1小节引出工程中对于该算法具体的实现.本节将着手讲解多边形填充算法. 二.承接上篇 2-1.多边形扫描转换 把顶点表示转换为点阵表示:①从多边形的给定边界出发,求出其内部的各个像素:②并给帧缓冲器中各个对应元素设置相应灰度或颜色
(转载)找圆算法((HoughCircles)总结与优化
Opencv内部提供了一个基于Hough变换理论的找圆算法,HoughCircle与一般的拟合圆算法比起来,各有优势:优势:HoughCircle对噪声点不怎么敏感,并且可以在同一个图中找出多个圆:反观拟合圆算法,单纯的拟合结果容易受噪声点的影响,且不支持一个输入中找多个圆缺点:原始的Hough变换找圆,计算量很大,而且如果对查找圆的半径不加控制,不但运算量巨大,而且精度也不足,在输入噪声点不多的情况下,找圆效果远不如拟合找圆:为了提高找圆精度,相比拟合法,需要提供更多的参数加以控制,参数要
转载-找圆算法((HoughCircles)总结与优化-霍夫变换
原文链接: http://www.opencv.org.cn/forum.php?mod=viewthread&tid=34096 找圆算法((HoughCircles)总结与优化 Opencv内部提供了一个基于Hough变换理论的找圆算法,HoughCircle与一般的拟合圆算法比起来,各有优势:优势:HoughCircle对噪声点不怎么敏感,并且可以在同一个图中找出多个圆:反观拟合圆算法,单纯的拟合结果容易受噪声点的影响,且不支持一个输入中找多个圆 缺点:原始的Hough变换找圆,计算量
找圆算法((HoughCircles)总结与优化
http://www.opencv.org.cn/forum.php?mod=viewthread&tid=34096 Opencv内部提供了一个基于Hough变换理论的找圆算法,HoughCircle与一般的拟合圆算法比起来,各有优势:优势:HoughCircle对噪声点不怎么敏感,并且可以在同一个图中找出多个圆:反观拟合圆算法,单纯的拟合结果容易受噪声点的影响,且不支持一个输入中找多个圆缺点:原始的Hough变换找圆,计算量很大,而且如果对查找圆的半径不加控制,不但运算量巨大,而且精度也不
matlab练习程序(Bresenham画线)
Bresenham画线算图形学中最基础的知识了,可惜我并没有选修过图形学,所有还是有必要熟悉一下. 上一篇用到的画线函数应该算是数值微分法,也是我最常用的一种方法,不过这种方法似乎并不是很好. 这里的画线方法比上一种方法好. 算法原理如下: 过各行各列象素中心构造一组虚拟网格线.按直线从起点到终点的顺序计算直线与各垂直网格线的交点,然后确定该列象素中与此交点最近的象素. 该算法的巧妙之处在于采用增量计算,使得对于每一列,只要检查一个误差项的符号,就可以确定该列的所求象素. 更细节的原理参考这里.
Bing必应地图中国API - 在地图上画圆
Bing必应地图中国API - 在地图上画圆 2011-05-24 14:49:37| 分类: Bing&Google|字号 订阅 <变形金刚2>上映4日国内票房过亿,基本上我只能等盗版流出下载观看了.很多时候愿望很小,却不容易实现.比如我一直想写一篇博客,介绍一下在地图上画圆.这个想法来源于不止一个客户问起怎么在必应地图上实现区域搜索,比如搜索一个圆.长方形.多边形内的兴趣点. 于是衍生出来一个问题,微软必应地图为什么不提供更丰富的地图功能,比如测量两点之间的距离,画各种形
热门专题
IEnumerable和IQueryable区别、优缺点
MySQL数据库内链表更新
hbase导出数据到本地
onUpgrade 什么时候被调用
js设置select默认选中
gradle javax.jnlp 包不存在
advancedinstaller mysql 存储过程
黑苹果B360 9400F efi
三元组保存关系数据库
pcb板镀金与镀镍的区别
sparksql 存储分区表
原来程序实在centos部署,现在是在Ubuntu,需要注意
css背景图片铺满全屏
BindingSource刷新
U3D创建新的动画片段并设置为旧版模式
OpenCV2 solvePnP 非共面
python定义速度函数
gtkWindows安装包
没有DNS解析的网站访问流程
mongodb 增删改查