直线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, ...
随机推荐
- Truncate使用注意事项
1.TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行.但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志 ...
- python设计模式---绪论
1.程序只是一个工具,只知道使用工具就有价值的时代正在过去:现在对工作质量.开发速度及完美程度都很重要了.当前主要的问题是对工具的充分利用,在生活的方方面面,简单任务之所以简单是由于这些任务不需要特殊 ...
- spring boot 防止重复提交
服务器端实现方案:同一客户端在2秒内对同一URL的提交视为重复提交 上代码吧 pom.xml <?xml version="1.0" encoding="UTF-8 ...
- Kubernetes kubectl 命令概述
kubectl用于运行Kubernetes集群命令的管理工具. 语法 kubectl [command] [TYPE] [NAME] [flags] command:指定要在一个或多个资源执行的操作 ...
- 20189220 余超《Linux内核原理与分析》第八周作业
Linux内核如何装载和启动一个可执行程序 本章知识点 ELF(Executable and Linking Format)是一种对象文件的格式,用于定义不同类型的对象文件(Object files) ...
- hadoop作业
作业要求:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/3223 一.准备一个ubantu 系统 二.创建hadoop用户 创建 设密 ...
- vue 创建监听,和销毁监听(addEventListener, removeEventListener)
最近在做一个有关监听scroll的功能, 发现我添加监听之后一直不起作用: 1 2 mounted() { window.addEventListener("scroll" ...
- CMU Database Systems - MVCC
MVCC是一种用空间来换取更高的并发度的技术 对同一个对象不去update,而且记录下每一次的不同版本的值 存在不会消失,新值并不能抹杀原先的存在 所以update操作并不是对世界的真实反映,这是一种 ...
- 使用spring validation完成数据后端校验-自定义校验的注解-判断是否为空
引入依赖 我们使用maven构建springboot应用来进行demo演示. <dependencies> <dependency> <groupId>org.sp ...
- 缓存:修改Hosts不生效
修改Hosts为何不生效,是DNS缓存? - Barret李靖 - 博客园https://www.cnblogs.com/hustskyking/p/hosts-modify.html 换个未打开过的 ...