首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
bresenham算法画直线代码VC
2024-09-03
Bresenham快速画直线算法
现在的计算机的图像的都是用像素表示的,无论是点.直线.圆或其他图形最终都会以点的形式显示.人们看到屏幕的直线只不过是模拟出来的,人眼不能分辨出来而已.那么计算机是如何画直线的呢,其实有比较多的算法,这里讲的是Bresenham的算法,是光栅化的画直线算法.直线光栅化是指用像素点来模拟直线,比如下图用蓝色的像素点来模拟红色的直线. 给定两个点起点P1(x1, y1), P2(x2, y2),如何画它们直连的直线呢,即是如何得到上图所示的蓝色的点.假设直线的斜率0<k>0,直线在第一象限,Bres
《图形学》实验五:改进的Bresenham算法画直线
开发环境: VC++6.0,OpenGL 实验内容: 使用改进的Bresenham算法画直线. 实验结果: 代码: //中点Bresenham算法生成直线 #include <gl/glut.h> #include <math.h> #define WIDTH 500 //窗口宽度 #define HEIGHT 500 //窗口高度 #define DRAWLINE ProBresenham(100,100,400,400); //画直线 #pragma comment(linke
《图形学》实验四:中点Bresenham算法画直线
开发环境: VC++6.0,OpenGL 实验内容: 使用中点Bresenham算法画直线. 实验结果: 代码: //中点Bresenham算法生成直线 #include <gl/glut.h> #include <math.h> #define WIDTH 500 //窗口宽度 #define HEIGHT 500 //窗口高度 #define DRAWLINE1 MidpointBresenham(100,200,200,100); //画直线 #define DRAWLINE
Python使用DDA算法和中点Bresenham算法画直线
title: "Python使用DDA算法和中点Bresenham算法画直线" date: 2018-06-11T19:28:02+08:00 tags: ["图形学"] categories: ["Python"] 先上效果图 代码 #!/usr/bin/env python # coding=utf-8 from pylab import * from matplotlib.ticker import MultipleLocator impo
《图形学》实验七:中点Bresenham算法画椭圆
开发环境: VC++6.0,OpenGL 实验内容: 使用中点Bresenham算法画椭圆. 实验结果: 代码: #include <gl/glut.h> #define WIDTH 500 #define HEIGHT 500 #define OFFSET 15 //偏移量,偏移到原点 #define A 6 #define B 5 void Init() //其它初始化 { glClearColor(1.0f,1.0f,1.0f,1.0f); //设置背景颜色,完全不透明 glColor3
《图形学》实验六:中点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); //设置画笔
《图形学》实验三:DDA算法画直线
开发环境: VC++6.0,OpenGL 实验内容: 使用DDA算法画直线. 实验结果: 代码: #include <gl/glut.h> #include <math.h> #define WIDTH 500 //窗口宽度 #define HEIGHT 500 //窗口高度 #define DRAWLINE1 DDALine(100,200,200,100); //画直线 #define DRAWLINE2 DDALine(200,100,450,400); //画直线 #pra
基于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---&
Bresenham算法画填充圆及SDL代码实现
画圆是计算机图形操作中一个非常重要的需求.普通的画圆算法需要大量的浮点数参与运算,而众所周知,浮点数的运算速度远低于整形数.而最终屏幕上影射的像素的坐标均为整形,不可能是连续的线,所以浮点数运算其实纯属浪费.下面介绍的Bresenham算法就是根据上文的原理设计.该算法原应用于直线的绘制,但由于圆的八分对称性,该算法也适用与圆(曲线图形)的绘制. 该算法主要是这样的原理:找出一个1/8的圆弧,用快速的增量计算找出下一个点.同时利用圆的八分对称性,找出8个点(包括该点),进行绘制. 这里给出示例的
Bresenham’s algorithm( 布兰森汉姆算法)画直线
Bresenham直线算法是用来描绘由两点所决定的直线的算法,它会算出一条线段在 n 维光栅上最接近的点.这个算法只会用到较为快速的整数加法.减法和位元移位,常用于绘制电脑画面中的直线.是计算机图形学中最先发展出来的算法. 经过少量的延伸之后,原本用来画直线的算法也可用来画圆.且同样可用较简单的算术运算来完成,避免了计算二次方程式或三角函数,或递归地分解为较简单的步骤. 基本算法思想 Bresenham直线算法描绘的直线.假设我们需要由 (x1, y1) 这一点,绘画一直线至右上角的另一点(x2
【转】Bresenham快速画直线算法
一. 算法原理简介: 算法原理的详细描述及部分实现可参考: http://www.cs.helsinki.fi/group/goa/mallinnus/lines/bresenh.html Fig.1 假设以(x, y)为绘制起点,一般情况下的直观想法是先求m = dy /dx(即x每增加1, y的增量),然后逐步递增x, 设新的点为x1 = x + j, 则y1 = round(y + j * m).可以看到,这个过程涉及大量的浮点运算,效率上是比较低的(特别是在嵌入式
OpenGL ES 画直线代码实例
http://blog.csdn.net/yexiaozi_007/article/details/7978620 以画xyz坐标轴为例,很多人会遇到用glcolor设置了颜色,但是直线画出来还是黑色或者白色的情况,这可能是因为没有打开GL_COLOR_MATERIAL,或者没有关闭GL_TEXTURE_2D glEnable(GL_DEPTH_TEST); glLineWidth(3.0f); glEnable(GL_COLOR_MATERIAL); float axes_length = 0
bresenham 算法生成直线
struct Point{ Point() { posx = 0; posy = 0; } Point(int x, int y) { posx = x; posy = y; } int posx; int posy;}; void bresenham(int x1, int y1, int x2, int y2, vector<Point>& path){ path.clear(); int dx = abs(x2 - x1); int dy = abs(y2 - y1); int
直线的Bresenham算法
在实验课上用自己的算法画直线被diss效率低 花了半天时间看了下Bresenham算法真
基于Bresenham和DDA算法画线段
直线:y=kx+b 为了将他在显示屏上显示出来,我们需要为相应的点赋值,那么考虑到计算机的乘法执行效率,我们肯定不会选择用Y=kx+b这个表达式求值,然后进行画线段. 我们应当是将它转化为加法运算. 下面提供两种常见的算法: 方法1:DDA算法 DDA算法的思想是 1.判断直线是近x轴线段,还是近y轴线段 2.求出delt_x,delt_y ,以较大值为总步长,每次以此为标准,步进,然后求另一个值的增长值. 实现: 方法二:Bresenham算法实现 算法思想: dBresenham算法只要求做
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 ?
利用canvas实现的中点Bresenham算法
Bresenham提出的直线生成算法的基本原理是,每次在最大位移方向上走一步,而另一个方向是走步还是不走步取决于误差项的判别,具体的实现过程大家可以去问度娘.我主要是利用canvas画布技术实现了这个过程,算法可能还是有点小问题,欢迎大家给我留言建议,一定虚心接受. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>中
通过Bresenham算法实现完成矢量线性多边形向栅格数据的转化
1.实验目的与要求 目的:通过本次实验,完成矢量线性多边形向栅格数据的转化过程: 要求:采用VC++6.0实现. 2.实验方法 采用Bresenham算法实现 3.实验材料 直线的定义:y = x/3, 起点为(0, 0),终点为(12, 4); 网格坐标要求:网格分辨率为0.2,网格起点同直角坐标系原点相同 4.实验结果 程序运行的结果,要依次输出栅格单元的栅格坐标 注意事项:本实验中,栅格的分辨率同实际坐标不等,注意格子单位的输出过程以及矢量坐标向格子坐标的转化. 5.程序源代码 //采用B
bresenham算法的FPGA的实现2
在上一篇里http://www.cnblogs.com/sepeng/p/4045593.html <bresenham算法的FPGA的实现1>已经做了一个整体框架的布局,但是那个程序只是支持|k|<1.要想全屏支持,就还需要对这个程序做修改,觉得自己的修改方式很繁琐,期望大家的指点,有高质量的code出现.算法的原理部分在上一篇中已经给出 /* date:2014/10/23 version : QuartusII + de1-soc cyclone V designer : peng
bresenham算法的FPGA的实现1
接着上一篇的 计算实现给出屏幕上任意两个点,求出这两个点之间直线上的所有的点.http://www.cnblogs.com/sepeng/p/4042464.html 这种直接算法的确是被鄙视了 强大的度娘告诉我们还有专用的算法叫bresenham算法.调用我大脑中所有的数学知识残留借用网上资料,费尽了吃奶的力气才把这个算法推导了一遍,高手们不要笑话 后来觉得这个时候讨论的是 0<k<1.那么把pi换一换就是 -1<k<0.仿真后发现自己又脑残了一次,对算法知之甚少,组合了好几次都
热门专题
mongo int最大值
实现查询功把文件中的字符串转换为字典
iOS分阶段发布有提示吗
easyexcel 在最后一行写入
lombok eclipse 不生效
QT 没桌面环境 能运行窗口程序吗
swigger 注释
怎么让canvas.strokeRect在video上面
encryptedData c# 解密
mybatisplus多表联查
rabbitmq手动重试
背景图 部署到生产不展示
bonding 怎么使用
stream 并行计算
Yii2 接口限制重复提交
python3.6.7为什么import tkinter报错
达梦 AES128_CBC pad
inet_ntop 返回空
clang format 行宽
nodejs开发工具