计算机图形学 - 抛物线的中点生成算法

算法描述:

  对于抛物线,先分析一种最为特殊的情况,就是对称轴为y轴,且经过坐标原点。如图所示:

  

  只要生成了这样一个抛物线,那么一般情况下的抛物线都可以凭借这种特殊情况进行平移、旋转得到。而由于该特殊情况下的抛物线在y轴两侧是对称的,所以只需要解决第一象限内的抛物线的生成就能够得到完整的图像。
  那么如何得到这种特殊情况下的抛物线

  由上图可知,假设一点在抛物线第一象限上从原点开始移动,并过该点A作抛物线的切线,那么根据切线的斜率k=1可以将该象限内的抛物线分为两个部分,一部分为点A左边,切线斜率全部小于1;另外一部分为点A右边,切线斜率全部大于1。
  根据之前中点生成算法的思想可知,在左半部分,每次生成可将X坐标递增1,根据决策参数判断Y坐标是否增加  

区域1

  在右半部分,每次生成可将Y坐标递增1,根据决策参数判断X坐标是否增加。

区域2

  接下来就是决策参数的推导:

  抛物线方程为,则该曲线方程有两种形式:

  

  区域1:

  

  当时:下一个点的坐标应该选择,此时:

  

  当时:下一个点的坐标应该选择,此时:

  

  

  区域2:

  

  当时:下一个点的坐标应该选择,此时:

  

  当时:下一个点的坐标应该选择,此时:

  

  详细代码:Computer Graphics - code_1

  生成结果:

  

时间: 2024-08-07 16:38:01

计算机图形学 - 抛物线的中点生成算法的相关文章

计算机图形学 - 圆的中点生成算法验证

算法描述: 圆的中点生成算法 如果我们构造函数 F(x,y)=x2+y2-R2,则对于圆上的点有F(x,y)=0,对于圆外的点有F(x,y)>0,对于圆内的点F(x,y)<0 . 与中点画线法一样,构造判别式: d=F(M)=F(xp+1,yp-0.5)=(xp+1)2+(yp-0.5)2-R2 若d<0,则应取P1为下一像素,而且再下一像素的判别式为: d=F(xp+2,yp-0.5)=(xp+2)2+(yp-0.5)2-R2=d+2xp+3 若d≥0,则应取P2为下一像素,而且下一像

计算机图形学 – 椭圆的中点生成算法

算法描述: 对于一般位置的椭圆, 例如, 可将中心平移到坐标原点, 确定好中心在原点的标准位置的椭圆像素点集后,再平移到位置,将问题转变为标准位置的椭圆的绘制问题. 如果椭圆的长轴和短轴方向不与坐标轴x 和y 平行,那么可以采用旋转坐标变换的方式, 同样将问题转变为标准位置的椭圆的绘制 即. 定义下面椭圆中点算法的判别式: 则: 若< 0,说明在椭圆边界内: 若= 0,说明在椭圆边界上: 若> 0,说明在椭圆边界外: 由于椭圆的对称性, 这里只讨论第一象限椭圆弧的生成. 在处理这段椭圆弧时,

计算机图形学 - 全斜率直线中点生成算法

算法描述: 直线中点生成算法 假定直线斜率k在(0,1]之间,当前像素点为,则下一个像素点有两种可选择点P1或P2. 若P1与 P2的中点称为M,Q为理想直线与x=xp+1垂线的交点. • 当M在Q的下方时,则取P2为下一个像素点: • 当M在Q的上方时,则取P1为下一个像素点. 这就是中点画线法的基本原理. 算术推导: 详细代码:Computer Graphics - code_1 生成结果:

计算机图形学 有效边表填充算法(6)

作者:卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/40154077 本文通过一个完整的实例,展示多边形有效边表填充算法. 1)创建CAET类 头文件:AET.h // AET.h: interface for the CAET class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_AET_

计算机图形学 直线反走样Wu算法(4)

作者:卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/40048285 本文通过一个完整的实例来演示,直线反走样Wu算法. 1)创建CP2类 头文件:P2.h // P2.h: interface for the CP2 class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_P2_H__DD2

计算机图形学 Cohen-Sutherland直线段裁剪算法

作者 : 卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/40822977 本文通过一个完整的实例演示Cohen-Sutherland直线段裁剪算法. 1)创建类CP2 头文件:P2.h // P2.h: interface for the CP2 class. // ////////////////////////////////////////////////////////////////////// #if !defined

计算机图形学中的种子填充算法c++程序实现

种子填充其实很简单,计算机图形学中介绍的使用栈,感觉作者是不是脑子进水了,直接使用一个队列用广搜就可以了啊,但是我就懒得写了,直接一个递归算了,有兴趣的同学自己试一试 #include<graphics.h>#include<conio.h>  #include<stdio.h>#include<math.h>int Graph[500][500] ; void scanline_seed_fill(int color,int sx,int sy){ Gra

计算机图形学 - 线段裁剪 - Liang Barsky算法(梁友栋算法)

算法描述: Liang_Barsky算法的基本出发点是直线的参数方程.给出任意一条直线段,两端点分别为和,令, 则直线的参数方程为: 如果直线上任意一点位于窗口内,则必须满足下列关系式: 上述不等式可以表示为: 其中p和q定义为: 任何一条直线如果平行于某一条裁剪边界,则有,下标k 对应于直线段平行的窗口边界(,并且分别表示裁剪窗口的左.右.下.上边界).如果对于某一个k值,满足,那么直线完全在窗口的外面,可以抛弃.如果,则该直线在它所平行的窗口边界的内部,还需要进一步计算才能确定直线是否在窗口

计算机图形学中的边标志算法c++程序实现2

摘要: 讲一讲这个程序遇到的错误 1.就是最后一个点,当他只有一个点的时候,他就是吧后面的全部填充,这是因为标志填充算法一定要有两个边界才可以,我解决这个问题的办法是错开一个点 2.就是当有三个点的时候,第2和3点中间部分就不会被填充了,以上的解决办法就是错开一点,也就是把第二个点变成两个点 3,使用中点画圆方法画的圆,在这个算法中,由于他选择的点有可能不是下一个点,而是跟当前点平行的那一个,这个时候他就会填充的是这两个点,所以会有下面运行结果图中心形上方的填充空白,尤其是弧度比较水平的时候 #