资源简介
计算机图形学之直线段的扫描转换C++实现
包含DDA数值微分算法,中点画线法,Bresenham算法
代码片段和文件信息
// 直线段扫描转换.cpp: 定义控制台应用程序的入口点。
//
#include “stdafx.h“
#include
#include
#include
#include
#include
using namespace std;
#define DDALINE 0
#define MIDPOINTLINE 1
#define BRESENHAMLINE 2
int line = DDALINE;
float down_x = 0 down_y = 0 up_x = 0 up_y = 0;
float delta = 1;
void IntergerBresenham(float x1 float y1 float x2 float y2 GLfloat*color GLfloat size = 1)
{
glPointSize(size);
float x = x1 y = y1;
float end_x = x2 end_y = y2;
float delta_x = x2 - x1;
float delta_y = y2 - y1;
float k = delta_y / delta_x;
float d d1 d2;
if (k < 1 && k >= 0) {
if (x2 - x1 < 0) {
x = x2;
y = y2;
end_x = x1;
end_y = y1;
delta_x = end_x - x;
delta_y = end_y - y;
}
d = 2 * delta_y - delta_x;
d1 = 2 * delta_y;
d2 = 2 * delta_x;
glBegin(GL_POINTS);
{
glColor3f(color[0] color[1] color[2]);
while (x < end_x) {
glVertex2f(x y);
x += delta;
d += d1;
if (d >= 0) {
y += delta;
d -= d2;
}
}
}
glEnd();
glFlush();
}
else if (k > 1) {
if (y2 - y1 < 0) {
x = x2;
y = y2;
end_x = x1;
end_y = y1;
delta_x = end_x - x;
delta_y = end_y - y;
}
k = 1 / k;
d = 2 * delta_x - delta_y;
d1 = 2 * delta_x;
d2 = 2 * delta_y;
glBegin(GL_POINTS);
{
glColor3f(color[0] color[1] color[2]);
while (y < end_y) {
glVertex2f(x y);
y += delta;
d += d1;
if (d >= 0) {
x += delta;
d -= d2;
}
}
}
glEnd();
glFlush();
}
else if (k < 0 && k > -1) {
if (x2 - x1 < 0) {
x = x2;
y = y2;
end_x = x1;
end_y = y1;
delta_x = end_x - x;
delta_y = end_y - y;
}
d = 2 * delta_y - delta_x;
d1 = 2 * delta_y;
d2 = 2 * delta_x;
glBegin(GL_POINTS);
{
glColor3f(color[0] color[1] color[2]);
while (x < end_x) {
glVertex2f(x y);
x += delta;
d += d1;
if (d < 0) {
y -= delta;
d += d2;
}
}
}
glEnd();
glFlush();
}
else {
if (y2 - y1 < 0) {
x = x2;
y = y2;
end_x = x1;
end_y = y1;
delta_x = end_x - x;
delta_y = end_y - y;
}
k = 1 / k;
d = 2 * delta_x - delta_y;
d1 = 2 * delta_x;
d2 = 2 * delta_y;
glBegin(GL_POINTS);
{
glColor3f(color[0] color[1] color[2]);
while (y < end_y) {
glVertex2f(x y);
y += delta;
d += d1;
if (d < 0) {
x -= delta;
d += d2;
}
}
}
glEnd();
glFlush();
}
}
void Bresenham(float x1 float y1 float x2 float y2 GLfloat*color GLfloat size = 1)
{
glPointSize(size);
float x = x1 y = y1;
float end_x = x2 end_y = y2;
float d = 0;
float delta_x = x2 - x1 delta_y = y2 - y1;
float k = delta_y / delta_x;
if (k < 1 && k >= 0) {
if (x2 - x1 < 0) {
x = x2;
y = y2;
end_x = x1;
end_y = y1;
}
d = k;
glBegin(GL_POINTS);
{
glColor3f(color[0] colo
相关资源
- 开放源码的计算机图形学几何算法包
- 计算机图形学课程设计皮球运动动画
- 计算机图形学考试内容-Opengl-会移动的
- 计算机图形学 课程设计 作业
- 双三次B样条曲面算法 计算机图形学
- 三次B样条曲线算法 计算机图形学 案
- Bezier曲线MFC实现源代码
- 计算机图形学实验之消隐处理
- 计算机图形学——立方体旋转 VC MFC
- 计算机图形学大作业 二维图形变换
- 北京邮电大学大三下计算机图形学作
- 计算机图形学 四面体的消隐
- 计算机图形学直线、圆、多边形画法
- 球的绘制与消隐
- 立方体的绘制与消隐
- 计算机图形学教程第二版实验生成“
- 计算机图形学图形的区域填充
- 计算机图形学正十二面体旋转
- 计算机图形学消隐实验转
- 计算机图形学实验报告
- 计算机图形学,实现茶壶旋转,颜色
- VC++计算机图形学制作二维图形变换代
- 计算机图形学作业原创C/C++ VC++6.0,
- VC++6.0编写的画图软件
- 计算机图形学MFC
- 计算机图形学大作业 用vc++编的,包括
- 计算机图形学动态图形源代码
- 计算机图形学作业源程序
- 计算机图形学三维变换
- 计算机图形学大实验直线DDA和bresenh
评论
共有 条评论