计算机图形学实验三:多边形填充算法之活性边表方法实现

计算机图形学实验三:多边形填充算法之活性边表方法实现

解救众多被计算机图形学实验所困扰的学生党们,本博客仅粘贴代码,活性边表实现多边形填充的原理请自行百度或Google,网上从来不缺原理。
注意,本博客中的代码运行不能实现含有内多边形如‘’字型多边形。
ps:该实现结果为放大二十倍之后的结果,如果要更改放大倍数请修改函数Polyscan中末尾几行的代码glVertex2i(static_cast(j) * 20, i * 20); 内的扩大倍数20,同时将init函数中用于绘制表格的两个for循环函数中的x += 20及y += 20 的20改为你扩大的倍数。

代码在此,参考为上,借鉴最佳

#include "pch.h"
#include <iostream>
#include<windows.h>
#include<GL/glut.h>

const int POINTNUM = 4;      //多边形点数.
const int WindowWidth = 600, WindowHeight = 320;

//bresenham算法,用于多边形的绘制
void BresenhamLine(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) {
   
		if (dy < 0) {
   
			int tempx0 = x01, tempy0 = y01;
			x01 = x11, y01 = y11;
			x11 = tempx0, y11 = tempy0;
		}
		for (int y = y01; y <= y11;) {
   
			glVertex2i(x01, y);
			y += 20;
		}
	}
	else {
   
		if (((dy > dx) && (dx < 0) && (dy * dx > 0)) || ((dy < dx) && (dy > 0))) {
     //0<k<1
			int tempy = y01;
			int e = -dx;
			if (dx < 0) {
   
				int tempx0 = x01, tempy0 = y01;
				x01 = x11, y01 = y11;
				x11 = tempx0, y11 = tempy0;
				dx = x11 - x01, dy = y11 - y01;
				e = -dx;
				tempy = y01;
			}
			for (int x = x01; x <= x11;) {
   
				if (e < 0) {
   
					glVertex2i(x, tempy);
					e = e + 2 * dy;
					x = x + 20;
				}
				else
				{
   
					e = e - 2 * dx;
					tempy = tempy + 20;
					glVertex2i(x, tempy);
					e = e + 2 * dy;
					x = x + 20;
				}
			}
		}
		else if (((dy < dx) && (dx < 0)) || ((dy > dx) && (dx > 0))) {
     //k>1
			int tempx = x01;
			int e = -dy;
			if (dx < 0) {
   
				int tempx0 = x01, tempy0 = y01;
				x01 = x11, y01 = y11;
				x11 = tempx0, y11 =<
  • 5
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值