![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
计算机图形学
想去的远方
做一个自由又自律的人,靠势必实现的决心认真地活着!
展开
-
Weiler-Athenton算法
与Sutherland-Hodgeman算法的比较:Sutherland-Hodgeman算法解决了裁剪窗口为凸多边形窗口的问题,但一些应用需要涉及任意多边形窗口(含凹多边形窗口)的裁剪,就可能会出错。而Weiler-Atherton多边形裁剪算法正是满足这种要求的算法。如下图,对凹多边形 P1P2P3P4 进行裁剪,Sutherland-Hodgeman算法会得到如下中间图形,但正确的裁...原创 2019-11-07 20:27:55 · 4232 阅读 · 1 评论 -
Sutherland-Hodgeman 逐次裁剪法(多边形裁剪)
Sutherland-Hodgeman多边形裁剪算法思想: 每次用窗口的一条边界(包括延长线)对要裁剪的多边形进行裁剪,裁剪时,顺序地测试多边形各顶点,保留边界内侧的顶点,删除外侧的顶点,同时,适时地插入新的顶点:即交点和窗口顶点,从而得到一个新的多边形顶点序列。 然后以此新的顶点序列作为输入,相对第二条窗边界线进行裁剪,又得到一个更新的多边形顶点序列。 依次下去,相对于第三条、...原创 2019-11-05 08:07:36 · 4369 阅读 · 0 评论 -
Nicholl-Lee-Nicholl算法裁剪线段
算法简介:Nicholl-Lee-Nicholl(NLN)算法通过在裁剪窗口边界创建多个区域,从而避免对一个直线段进行多次裁剪。Cohen-Sutherland算法中,在找到与裁剪窗口边界的交点之前或完全舍弃该线段之前,必须对一条线段进行多次求交计算。NLN算法则在求交计算前进行更多的区域测试,从而减少求交计算。NLN算法的特点是效率高,但该算法仅用于二维裁剪。算法描...原创 2019-10-28 17:02:06 · 1107 阅读 · 0 评论 -
中点分割算法
算法思想设要裁剪的线段是P1P2。中点分割算法可分成两个平行的过程进行,即从P1点出发找出离P1最远的可见点(图中的B点),和从P2点出发找出离P2最远的可见点(图中的A点)。这两个可见点的连线就是原线段的可见部分。算法的基本流程:(求 P1 最远可见点)以P1出发,检测点P2是否在窗口内,若是,即是所求点;若不是,则转 2 . 若 P1P2 为完全不可见,则结束该算法,否...原创 2019-10-22 16:39:32 · 5467 阅读 · 2 评论 -
Cohen-Sutherland线裁剪算法
直线裁剪算法裁剪:计算机内部存储的图形往往比较大,而屏幕显示的只是图形的一部分,因此需要确定图形哪些部分落在显示区之内,哪些落在显示区之外,这个选择的过程就称为裁剪。1. 最简单的裁剪方法是把直线扫描变换为各点是否在窗口内。但此方法太费时,效率比较低,一般不可取。对于任意一点P(x,y)若满足下列不等式,则点P在矩形窗口内2. 直线段的裁剪——>复杂图形裁剪的基础要裁剪一...原创 2019-10-22 14:21:34 · 5784 阅读 · 0 评论 -
种子填充算法----计算机图形学
种子填充算法:种子填充算法的基本思想是:从多边形区域的一个内点开始,由内向外用给定的颜色画点直到边界为止。区域可以由内部点或边界来定义,一般都采用边界定义,即区域边界上所有像素被置为特定值,而区域内部所有的像素均不取这个值。区域可以分为四连接或八连接两种:四连接区域:区域内每一个像素可以通过四个方向(上、下、左、右)组合到达。八连接区域:区域内每一个像素可以通过四个方向(上、...原创 2019-10-16 11:21:59 · 22232 阅读 · 7 评论 -
边标志填充算法----计算机图形学
边标志填充算法:基本原理:考虑每一条水平扫描线与每一条多边形边的交点,将该扫描线上交点右边的所有像素求补。对多边形的每条边作此处理,顺序随意。本算法的特点:优点:简单易行;缺点:对于复杂图形而言,一些像素的颜色值需反复改变多次,并且多边形外的像素处理过多,输入/输出的量比有序边表算法大得多。边填充算法的改进——栅栏填充算法栅栏:指的是一条与水平扫描线垂直的直线...原创 2019-10-14 21:42:08 · 4286 阅读 · 0 评论 -
有序边表算法----计算机图形学
有序边表算法:有序边表算法的基本思想是:用水平扫描线从上到下(或从下到上)扫描由多条首尾相连的线段构成的多边形,每根扫描线与多边形的某些边产生一系列交点。将这些交点按照x坐标排序,将排序后的点两两成对,作为线段的两个端点,以所填的颜色画水平直线。多边形被扫描完毕后,颜色填充也就完成了。扫描线填充算法也可以归纳为以下4个步骤:(1) 求交,计算扫描线与多边形的交点(2) 交点排序,...原创 2019-10-14 13:50:36 · 9794 阅读 · 1 评论 -
中点椭圆算法----计算机图形学
中点椭圆算法:(对于原点为(xc,yc)的椭圆,假定圆心在坐标原点(0,0)的像素位置,把计算出每个椭圆上像素点(x,y)加到屏幕位置上,即(xc+x,yc+y))椭圆与圆不同,不能八分只能四分。中点椭圆算法将分成两部分应用于第一象限。在斜率绝对值小于1的区域内在x方向取单位步长,在斜率绝对值大于1的区域内在y方向取单位步长。椭圆方程为 :(其中,a 为沿X轴方...原创 2019-10-10 00:37:10 · 5205 阅读 · 0 评论 -
中点画线算法画直线----计算机图形学
中点画线算法:所需绘制直线的左下端点记为,右上端点记为令 ,,则直线的斜截式为 :所以,用隐函数表示直线的方程为 : 容易验证,点(x , y)若在直线上,F(x , y)= 0 ;若在直线上方,F(x , y)>0 ;若在直线下方,F(x , y)<0 。(1). 斜率在 (0,1)区间:...原创 2019-10-09 21:33:14 · 8046 阅读 · 0 评论 -
Bresenham 画线算法画直线----计算机图形学
Bresenham 画线算法:与DDA算法相似,Bresenham画线算法也要在每列象素中找到与理想直线最逼近的象素点。根据直线的斜率来确定变量在x或y方向递增一个单位。另一个方向y或x的增量为0或1,它取决于实际直线与最接近网格点位置的距离。这一距离称为误差。算法的巧妙构思,使每次只需检查误差项(增量)的符号即可。这里讨论直线斜率在(0,1)区间的情况,其他情况可...原创 2019-10-08 22:30:19 · 2636 阅读 · 0 评论 -
中点画圆算法----计算机图形学
圆的对称特性:一个八分圆上的点可以映射为其余七个八分圆的点利用圆的对称性可以减少计算量,只需要计算出一个八分之一圆上需要画的点,就可以映射出整个圆中点画圆算法:(对于原点为(xc,yc)的圆,假定圆心在坐标原点(0,0)的像素位置,把计算出每个圆上像素点(x,y)加到屏幕位置上,即(xc+x,yc+y))现在来具体研究如何从点(0,R)到 (, )顺时...原创 2019-10-08 21:21:35 · 4728 阅读 · 1 评论 -
DDA算法画直线----计算机图形学
生成直线的DDA算法: 假设待扫描转换的直线段为 Pb(xb, yb), Pe(xe, ye),如图所示:令,斜率,则直线方程为为方便起见,这里假定。显然,对于每一个 xi的取值(x的变化规律是每次递增1),都有唯一的 yi值与之对应,通过对 yi值做四舍五入运算,最终确定每一扫描列上的像素值。但这种策略效率不高,因为每次迭代都要做一次浮点...原创 2019-10-08 11:35:31 · 4525 阅读 · 0 评论 -
pyqt5画直线(UI界面)----计算机图形学
运行环境: ubantu18 + pycharm + pyqt5运行效果:大体思路:左边界面为键入的直线信息,右边的界面显示画图效果。整个界面使用desiger新建 Main Window拖拽生成 UI界面。右边画图部分的实现使用paintEvent(QPaintEvent*)函数。由于paintEvent(QPaintEvent*)函数是QWidget类中的虚函数,用于...原创 2019-10-08 09:44:56 · 7076 阅读 · 0 评论