计算机图形学实验一:直线的Bresenham算法和DDA算法实现
解救众多被计算机图形学实验所困扰的学生党们,本博客仅粘贴代码,直线的Bresenham算法和DDA算法的原理请自行百度或Google,网上从来不缺原理。
ps :本代码属于硬核坐标放大,改进版坐标放大的方法请看博主另一篇博客计算机图形学实验三:多边形填充算法之活性边表方法实现中的坐标放大方法,比这里面的放大方法好了不下100倍!只是博主做完实验一身轻松,就不想再倒回去折腾了,你们就自己动手改吧,不然就用我这个硬核坐标放大也是没有问题的,就是解释器爱稍微麻烦了一点。
代码在此,参考为上,借鉴最佳
#include "pch.h"
#include <iostream>
#include<GL/glut.h>
#include<math.h>
#include<Windows.h>
const int WindowWidth = 800, WindowHeight = 800;
//DDA算法
void DDALine(int x0, int y0, int x1, int y1)
{
int x01 = x0 * 20, y01 = y0 * 20, x11 = x1 * 20, y11 = y1 * 20;
int dx = x11 - x01, dy = y11 - y01;
if (dx != 0)
{
int k = dy * 20 / dx;
if ((k > 20)||(k<-20)) {
if (dy < 0) {
int tempx0 = x01, tempy0 = y01;
x01 = x11, y01 = y11;
x11 = tempx0, y11 = tempy0;
}
int x = x01;
k = dx * 20 / dy;
int tempx = 0;
glVertex2i(x01, y01);
for (int y = y01 + 20; y <= y11;)
{
x = x + k;
if (x < 0) {
if (x % 20 == -10)
{
tempx = x / 20;
glVertex2i(tempx * 20, y);
}
else
tempx = (x - 10) / 20;
}
else
tempx = (x + 10) / 20;
glVertex2i(tempx * 20, y);
y = y + 20;
}
}
else{
if (dx < 0) {
int tempx0 = x01, tempy0 = y01;
x01 = x11, y01 = y11;
x11 = tempx0, y11 = tempy0;
}
int y = y01;
int tempy =