资源简介
计算机图形学之直线段的扫描转换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源代
- 计算机图形学走样反走样时钟
- 西北工业大学软件学院计算机图形学
- 计算机图形学实验源代码中南民族大
- 绘制任意斜率的直线段
- 计算机图形学简单CAD系统
- 计算机图形学多边形种子填充算法
- 计算机图形学 消隐
- 计算机图形学作业,中点算法画椭圆
- MFC中点圆的生成算法
- 改进的有效边表算法--计算机图形学
- 最好的CS游戏opengl、C++实现
- 计算机图形学 清华大学教材 及 vc++
- 孔令德的计算机图形学实验及课程设
- 计算机图形学大作业参考代码(VC版)
- 计算机图形学 图形变换 C++ MFC
- 用visual C++ 6.0编写的计算机图形的一些
- 计算机图形学简单多边形裁剪程序
- 计算机图形学 大作业 多功能图形学程
- MFC多边形画法--计算机图形学
- 计算机图形学 visual c++ 6.0 实时动画有
- 计算机图形学 visual c++ 6.0 三维变换有
- 计算机图形学基于opengl图形变换源代
- 计算机图形学大作业简易绘图板mfc
- 计算机图形学OPENGL 动画代码
- 计算机图形学画线、画圆、种子填充
- vc6.0实现的计算机图形学各种算法源代
- VC++的MFC计算机图形学点线多边形裁剪
- 计算机图形学源代码
- 计算机图形学作品vc++
评论
共有 条评论