计算机图形学实验一:直线的Bresenham算法和DDA算法实现

本文提供了计算机图形学实验中直线的Bresenham算法和DDA算法的代码实现,旨在帮助学生理解并完成实验。虽然采用硬核坐标放大方法,博主建议参考其在多边形填充算法实验中改进的坐标放大技术,性能更优。代码仅供学习参考。
摘要由CSDN通过智能技术生成

计算机图形学实验一:直线的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 =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值