直线DDA,直线和圆的Bresenham算法




// DDA.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include<Windows.h>
#include<graphics.h>
#include<conio.h>
#include<math.h>
void dda_line(int xa, int ya, int xb, int yb, int c);
int main(int argc, _TCHAR* argv[])
{
int gd=DETECT,gm; /*图形屏幕初始化*/
initgraph(&gd,&gm,"");
dda_line(,,,,);
getch();
closegraph();
return ;
} void dda_line(int xa, int ya, int xb, int yb, int c)
{
float delta_x, delta_y, x, y;
int dx, dy, steps, k;
dx=xb-xa;
dy=yb-ya;
if(abs(dx)>abs(dy))steps=abs(dx);
else steps=abs(dy);
delta_x=(float)dx/(float)steps;
delta_y=(float)dy/(float)steps;
x=xa;
y=ya;
putpixel(x, y, c);
for(k=;k<=steps;k++)
{
x+=delta_x;
y+=delta_y;
putpixel(x, y, c);
}
}



#include "stdafx.h"
#include<Windows.h>
#include<graphics.h>
#include<conio.h>
#include<math.h>
void lineBres(int x0, int y0, int xEnd, int yEnd,int c);
int main(int argc, _TCHAR* argv[])
{
int gd=DETECT,gm; /*图形屏幕初始化*/
initgraph(&gd,&gm,"");
lineBres(,,,,);
getch();
closegraph();
return ;
} void lineBres(int x0, int y0, int xEnd, int yEnd,int c)
{
int dx = (int)fabs(double((xEnd-x0)));
int dy = (int)fabs(double(yEnd-y0));
int p =* dy-dx;
int twoDy = *dy, twoDyMinusDx = * (dy - dx);
int x,y; if (x0>xEnd)
{
x=xEnd;
y=yEnd;
xEnd=x0;
}
else{
x=x0;
y=y0;
}
putpixel (x,y,c); while (x<xEnd)
{
x++;
if(p<)
p+=twoDy;
else{
y++;
p+=twoDyMinusDx;
}
putpixel (x,y,c);
}
}






#include "stdafx.h"
#include<Windows.h>
#include<graphics.h>
#include<conio.h>
#include<math.h>
void CircleBres(int xc, int yc, int radious, int c);
void plot_circle_points(int xc, int yc, int x, int y, int c);
int main(int argc, _TCHAR* argv[])
{
int gd=DETECT,gm; /*图形屏幕初始化*/
initgraph(&gd,&gm,"");
CircleBres(,,,);
getch();
closegraph();
return ;
}
void CircleBres(int xc, int yc, int radious, int c)
{
int x,y,p;
x=;
y=radious;
p=-*radious;
while(x<y){
plot_circle_points(xc,yc,x,y,c);
if(p<) p=p+*x+;
else{
p=p+*(x-y)+;
y-=;
}
x+=;
}
if(x==y){
plot_circle_points(xc,yc,x,y,c);
}
}
void plot_circle_points(int xc, int yc, int x, int y, int c)
{
putpixel(xc+x, yc+y, c);
putpixel(xc-x, yc+y, c);
putpixel(xc+x, yc-y, c);
putpixel(xc-x, yc-y, c);
putpixel(xc+y, yc+x, c);
putpixel(xc-y, yc+x, c);
putpixel(xc+y, yc-x, c);
putpixel(xc-y, yc-x, c);
}
图形EasyX库:
https://files.cnblogs.com/files/asahiLikka/EasyX_v20120304%28beta%29.zip
直线DDA,直线和圆的Bresenham算法的更多相关文章
- Python使用DDA算法和中点Bresenham算法画直线
title: "Python使用DDA算法和中点Bresenham算法画直线" date: 2018-06-11T19:28:02+08:00 tags: ["图形学&q ...
- 计算机图形学之扫描转换直线-DDA,Bresenham,中点画线算法
1.DDA算法 DDA(Digital Differential Analyer):数字微分法 DDA算法思想:增量思想 公式推导: 效率:采用了浮点加法和浮点显示是需要取整 代码: void lin ...
- 《图形学》实验五:改进的Bresenham算法画直线
开发环境: VC++6.0,OpenGL 实验内容: 使用改进的Bresenham算法画直线. 实验结果: 代码: //中点Bresenham算法生成直线 #include <gl/glut.h ...
- 《图形学》实验四:中点Bresenham算法画直线
开发环境: VC++6.0,OpenGL 实验内容: 使用中点Bresenham算法画直线. 实验结果: 代码: //中点Bresenham算法生成直线 #include <gl/glut.h& ...
- 基于Bresenham算法画圆
bresenham算法画圆思想与上篇 bresenham算法画线段 思想是一致的 画圆x^2+y^2=R^2 将他分为8个部分,如上图 1. 只要画出1中1/8圆的圆周,剩下的就可以通过对称关系画出这 ...
- [计算机图形学]光栅化算法:DDA和Bresenham算法
目录 一.DDA 二.Bresenham 三.绘制图形 1. 绘制直线 2. 绘制圆 3. 绘制椭圆 一.DDA DDA算法是最简单的直线绘制算法.主要思想是利用直线的斜截式:\(y=kx+b\) 对 ...
- Bresenham算法画填充圆及SDL代码实现
画圆是计算机图形操作中一个非常重要的需求.普通的画圆算法需要大量的浮点数参与运算,而众所周知,浮点数的运算速度远低于整形数.而最终屏幕上影射的像素的坐标均为整形,不可能是连续的线,所以浮点数运算其实纯 ...
- 《图形学》实验六:中点Bresenham算法画圆
开发环境: VC++6.0,OpenGL 实验内容: 使用中点Bresenham算法画圆. 实验结果: 代码: #include <gl/glut.h> #define WIDTH 500 ...
- Android利用canvas画各种图形(点、直线、弧、圆、椭圆、文字、矩形、多边形、曲线、圆角矩形) .
1.首先说一下canvas类: Class Overview The Canvas class holds the "draw" calls. To draw something, ...
随机推荐
- mysql regexp 表达式
mysql> select * from test; +----+----------+-------+-----------+ | id | name | score | subject | ...
- Java为什么没有指针
为了摒弃指针带来的风险(当然了,也就放弃了指针带来的效率). 1.C/C++为什么有指针? 这个很简单,程序都是在内存中运行的,只要有内存,就有内存地址,有地址,就必然有指针,只是C++对内存地址的访 ...
- CF1221F Choose a Square(二维偏序)
由于y=x,我们可以将点对称过来,以便(x,y)(x<y) 考虑选取正方形(a,a,b,b),点集则为\((a\le x\le y\le b)\),相当于二维数点 将点按x降序,y升序排列,线段 ...
- rust结构体
//Rust 并不允许只将某个字段标记为可变 struct User { email: String, name:String, age:i32, sex:String, active:bool, } ...
- NIO Channel Socket套接字相关Channel
阻塞非阻塞: NIO中的Channel主要分为两大类:一类是FileChannel,另一类是SocketChannel.NIO提供的核心非阻塞特性主要针对SocketChannel类,全部socket ...
- 剑指offer:平衡二叉树
题目描述: 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 思路分析: 首先要明确平衡二叉树的定义.平衡二叉是左右子树的高度差小于等于1,且左右子树都为平衡二叉树.这里就存在一个递归判断左右子树是否为 ...
- 绿色地狱 - 纽博格林赛道详解 | Nürburgring
Nürburgring - Green Hell [統哥] 車迷人生必去一趟的德國紐柏林賽道之旅 F1赛道通常短而宽,一是为了观赏性,二是为了安全. 而Nürburgring赛道则是F1赛道的极端反面 ...
- ProxyFactoryBean与AopProxy介绍
1.ProxyFactoryBean的典型配置 2.进入getObject方法 /** * Return a proxy. Invoked when clients obtain beans from ...
- centos 添加/删除用户和用户组
centos系统添加/删除用户和用户组 在centos中增加用户使用adduser命令而创建用户组使用groupadd命令,这个是不是非常的方便呀,其实复杂点的就是用户的组与组权限的命令了,下 ...
- dubbo架构角色
角色 Dubbo有5个参与者:其中Monitor.Registry不是必须的 Provider 暴露服务的服务提供方 Consumer 调用远程服务的服务消费方(负载均衡) Registry 服务注册 ...