当前位置:首页 » 操作系统 » 多边形扫描线算法

多边形扫描线算法

发布时间: 2022-04-28 09:25:32

Ⅰ 怎么用opengl扫描线算法填充多边形

扫描线算法是光栅图形学的内容,底层硬件实现。opengl是不会关注这种细节的。你写这样的代码
glBegin(GL_POLYGON);
glVertex3f(...);
...
glVertex3f(...);
glEnd();
画一个多边形,但底层的光栅化到底是怎么实现的,是否使用扫描线算法,你是不可以控制的。

c语言实现多边形填充

/*直角三角形,输入行数,输出*/
#include <stdio.h>
void main()/*如果TC编译不通过,则去掉void*/
{
int n;
scanf("%d",&n);
for (int i = 1;i <= n;i++)
{
for (int j = 0;j < i;j++)
printf("*");
printf("\n");
}
}
/*等腰三角形,输入行数,输出*/
#include <stdio.h>
void main()/*如果TC编译不通过,则去掉void*/
{
int n;
scanf("%d",&n);
for (int i = 1;i <= n;i++)
{
for (int k = 1;k <= n-i;k++)
printf(" ");
for (int j = 0;j < 2*i-1;j++)
printf("*");
printf("\n");
}
}
以上在VS2005上编译通过

Ⅲ 急求用C语言编写的扫描线填充多边形的算法

可惜,分少了。
去投票或回答问题弄50+分,问题加到50分+就可以办了。能给我投几票就更好了。( ⊙ o ⊙ )

Ⅳ 求c语言扫描线填充算法代码 事成再加100分

早讲啊,删了:(

这有个,一般能摆到的我都不求人
http://tieba..com/f?kz=194814414

pudn上搜呗,多的一塌糊涂

Ⅳ 多边形扫描转换中,活性边表的数据结构有哪几项

该算法用到的数据结构有:

typedef struct nodeEdge
{
int ymax; //边的上端点的y坐标
float x; //在AEL中表示当前扫描线与边的交点的x坐标,
//初值(即在ET中的值)为边的下端点x的坐标
float deltax; //边的斜率的倒数
nodeEdge *nextEdge; //指向下一条边的指针
}Edge; //边的分类表和活化边表的数据结构(扫描转换多边形的扫描线算法)

void CGraphicsView::SCanPolygon(int color,CDC*pDC)
{
//扫描转换多边形—扫描线算法
Edge *et[ARRLENGTH];
Edge e[90];
Edge* ael;
Edge test;
Edge *left,*right; //left和right做配对用
int i;

for(i=0;i<ARRLENGTH;i++)
{
et[i]=NULL;
}

//手动生成et表
e[0].ymax=40; e[0].x=50; e[0].deltax=-1; e[0].nextEdge=&e[20];
e[20].ymax=50; e[20].x=70; e[20].deltax=5.0/4; e[20].nextEdge=NULL;
e[60].ymax=80; e[60].x=20; e[60].deltax=0; e[60].nextEdge=NULL;
e[30].ymax=110; e[30].x=120; e[30].deltax=0; e[30].nextEdge=NULL;
e[50].ymax=80; e[50].x=70; e[50].deltax=-5; e[50].nextEdge=&e[40];
e[40].ymax=110; e[40].x=70; e[40].deltax=5.0/4; e[40].nextEdge=NULL;
et[0]=NULL; et[10]=&e[0]; et[20]=NULL; et[30]=NULL;
et[40]=&e[60]; et[50]=&e[30]; et[60]=NULL; et[70]=&e[50]; et[80]=NULL;

Ⅵ 求计算机图形学的习题

一、单项选择题(本大题共10小题,每小题3分,共30分)提示:在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分
1)灰度等级为256级,分辨率为1024*1024的显示模式,至少需要的帧缓存容量为___bit。
A、7M B、8M
C、10M D、16M

2) __是在高于显示分辨率的较高分辨率下用点取样方法计算,然后对几个像素的属性进行平均得到较低分辨率下的像素属性。实际上是把显示器看成是比实际更细的网格来增加取样率。
A、提高显示分辨率
B、图像分割
C、过取样(supersampling)
D、区域取样(areasampling)

3)用一个n位的整数表示一个位串,用它控制线型时,可以n个像素为周期进行重复显示。若Patten=11100101,
而i表示画线程序中的第i个像素,则画线程序中的SETPIXEL(X,Y,COLOR)可改写为__
A、if(pattern[i%4])setixel(x,y,color);
B、if(pattern[i%6])setixel(x,y,color);
C、if(pattern[i%8])setixel(x,y,color);
D、if(pattern[i%12])setixel(x,y,color);

4、点P的齐次坐标为(8,6,2),其对应的空间坐标为__ __。
A、(8,6,2) B、(8,6)
C、(4,3,1) D、(4,3)

5)在多边形的逐边裁剪法中,对于某条多边形的边(方向为从端点S到端点P)与某条裁剪线(窗口的某一边)的比较结果共有以下四种情况,分别需输出一些顶点.请问哪种情况下输出的顶点是错误的_____。
A:S和P均在可见的一侧,则输出S和P.
B:S和P均在不可见的一侧,则不输出顶点.
C:S在可见一侧,P在不可见一侧,则输出线段SP与裁剪线的交点.
D:S在不可见的一侧,P在可见的一侧,则输出线段SP与裁剪线的交点和P.

6)扫描线多边形填充算法中,对于扫描线同各边的交点的处理具有特殊性。穿过某两条边的共享顶点的扫描线与这两条边的交点数只能计为___交点:
A、0 个 B、1个
C、2个 D、3个

7、如果观察方向(视线方向)为Z轴负向,观察向量可设为V=(0,0,-1),则对场景中的图形表平面可判定其可见性。令某平面的法向量为N=(A,B,C)。当___时,该平面可判定为后向面(Back-Face)即是观察时不可见的面。
A、C<=0 B、C>=0
C、A>=0 D、B<=0

8、多边形面的平面方程为:Ax+By+Cz+D=0。投影后,若扫描线上起始点的深度值为,
则该面的扫描线上所有后继点的深度值计算公式为__ _
A)z(x+1,y)=z(x,y)+A/C
B)z(x+1,y)=z(x,y)-A/C
C)z(x+1,y)=z(x,y)+C/A
D)z(x+1,y)=z(x,y)-C/A

9)当观察光照下的光滑物体表面时,在某个方向上看到高光或强光,这个现象称为__ _
A、漫反射 B、镜面反射 C、环境光 D、折射

10)、绘制样条曲线时,如果控制点中的任一个发生了变动,则整条曲线都将受到影响的是_ __曲线:
A、自然三次样条
B、Hermite插值样条
C、Cardinal样条
D、Korchanek-Bartels样条
二、判断题(本大题共5小题,每小题2分,共10分)提示:正确打,错误打,并分别简述理由。
1、 处理器的主要任务是将应用程序给出的图形定义数字化为一组像素强度值,并存放在帧缓存中,这个数字化过程称为扫描转换。
2、绕多边形的边界,计算相邻边界向量的叉乘可识别出该多边形是凸还是凹多边形。如果叉乘结果全部为正则为凹多边形;若有正有负,则为凸多边形。
3、使用查色表可以提供合理的能够同时显示的颜色数,而无须大容量的帧缓冲器。这时,帧缓冲器中存放的是真正的颜色编码。
4、某种颜色,在GRB颜色模型下坐标值(1,0.7,0.8),在CMY颜色模型下也是(1,0.7,0.8)
5、透视投影变换后,图形中的不平行于观察平面的各组平行线的延长线,能够汇聚成最多3个灭点。
三.计算推导题目(本大题共2小题,每小题10分,共20分)。
1.给定四点P1(0,0,0),P2(1,1,1),P3(2,-1,-1),P4(3,0,0)。用其作为特征多边形来构造一条三次贝塞尔曲线段,请写出该曲线的参数化表达式,并计算参数为1、2/3时曲线上点的值。
2.用Liang-Barsky线段裁剪方法,使用窗口(0,0)(2,2)裁剪以下线段,要求写出计算步骤和裁剪结果。
a)线段A(1,-2)B(1,2)

四.变换题(本大题共3小题,每小题10分,共30分)。提示:用列向量表示,注意矩阵乘的顺序。用齐次坐标表示变换矩阵。不要求计算出最后结果,但是每个矩阵要表示出来。
1.二维空间中,图形绕点(-1,-2),顺时针旋转50度的变换矩阵。
2.在XOY二维平面坐标系中有点P(4,1)和点O’(3,4)。现以O’P作为Y’轴正向建立新坐标系X’O’Y’(都是右手坐标系),请写出图形由XOY到X’O’Y’的坐标变换矩阵。
3.设投影参考点为(0,0,d),投影面为xoy平面,请推导投影变换矩阵。
五、编程及分析题(本大题共1小题,每题10分,共10分),
1. 请根据中点圆生成算法思想,对圆x2+y2=R2,推出第一象限中从y=0到y=x这段弧的生成算法。要求推导出主要的计算公式,并写出算法(描述性算法)。提示这一段上,y的变换率比x大。
这个行不,要答案找我

Ⅶ 计算机图形学算法演示系统的设计的专业实习报告 要求用C++谁能给个成型的 急啊!!!

这个你找一下源码下载的网站,里面好像有

Ⅷ 填充算法的种子填充算法

种子填充算法又称为边界填充算法。其基本思想是:从多边形区域的一个内点开始,由内向外用给定的颜色画点直到边界为止。如果边界是以一种颜色指定的,则种子填充算法可逐个像素地处理直到遇到边界颜色为止。
种子填充算法常用四连通域和八连通域技术进行填充操作。
从区域内任意一点出发,通过上、下、左、右四个方向到达区域内的任意像素。用这种方法填充的区域就称为四连通域;这种填充方法称为四向连通算法。
从区域内任意一点出发,通过上、下、左、右、左上、左下、右上和右下八个方向到达区域内的任意像素。用这种方法填充的区域就称为八连通域;这种填充方法称为八向连通算法。
一般来说,八向连通算法可以填充四向连通区域,而四向连通算法有时不能填充八向连通区域。例如,八向连通填充算法能够正确填充如图2.4a所示的区域的内部,而四向连通填充算法只能完成如图2.4b的部分填充。
图2.4 四向连通填充算法
a) 连通域及其内点 b) 填充四连通域
四向连通填充算法:
a) 种子像素压入栈中;
b) 如果栈为空,则转e);否则转c);
c) 弹出一个像素,并将该像素置成填充色;并判断该像素相邻的四连通像素是否为边界色或已经置成多边形的填充色,若不是,则将该像素压入栈;
d) 转b);
e) 结束。
四向连通填充方法可以用递归函数实现如下:
算法2.3 四向连通递归填充算法:
void BoundaryFill4(int x, int y, long FilledColor, long BoundaryColor)
{
long CurrentColor;
CurrentColor = GetPixelColor(x,y);
if (CurrentColor != BoundaryColor && CurrentColor != FilledColor)
{
SetColor(FilledColor);
SetPixel (x,y);
BoundaryFill4(x+1, y, FilledColor, BoundaryColor);
BoundaryFill4(x-1, y, FilledColor, BoundaryColor);
BoundaryFill4(x, y+1, FilledColor, BoundaryColor);
BoundaryFill4(x, y-1, FilledColor, BoundaryColor);
}
}
上述算法的优点是非常简单,缺点是需要大量栈空间来存储相邻的点。一个改进的方法就是:通过沿扫描线填充水平像素段,来处理四连通或八连通相邻点,这样就仅仅只需要将每个水平像素段的起始位置压入栈,而不需要将当前位置周围尚未处理的相邻像素都压入栈,从而可以节省大量的栈空间。

Ⅸ 计算机图形学 问题 中点圆算法和扫描线算法

写个文档解释一下。

热点内容
hibernate存储blob 发布:2024-10-04 13:16:22 浏览:962
ppsspp安卓文件夹 发布:2024-10-04 13:02:11 浏览:587
android多listview 发布:2024-10-04 13:02:07 浏览:11
isp会限制ftp吗 发布:2024-10-04 13:02:04 浏览:98
20兆电信光纤上传速度 发布:2024-10-04 12:44:34 浏览:719
重命名文件夹linux 发布:2024-10-04 12:44:25 浏览:616
怎样在qq发送文件夹 发布:2024-10-04 12:44:25 浏览:360
加密狗发票 发布:2024-10-04 12:37:53 浏览:432
安卓手机怎么看应用数 发布:2024-10-04 12:30:34 浏览:154
windows7反编译 发布:2024-10-04 12:25:50 浏览:637