• 大小: 10KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-06-02
  • 语言: C/C++
  • 标签: Bresenham  

资源简介

计算机图形学之直线段的扫描转换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

评论

共有 条评论