计算机图形学08:中点BH算法绘制抛物线(100x = y^2)

Posted 非妃是公主

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机图形学08:中点BH算法绘制抛物线(100x = y^2)相关的知识,希望对你有一定的参考价值。

作者:非妃是公主
专栏:《计算机图形学》
博客地址https://blog.csdn.net/myf_666
个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩

文章目录

专栏推荐

专栏名称专栏地址
软件工程专栏——软件工程
计算机图形学 专栏——计算机图形学
操作系统专栏——操作系统
软件测试专栏——软件测试
机器学习专栏——机器学习
数据库专栏——数据库
算法专栏——算法

专栏系列文章

文章名称文章地址
直线生成算法(DDA算法)计算机图形学01——DDA算法
中点BH算法绘制直线计算机图形学02——中点BH算法
改进的中点BH算法计算机图形学03——改进的中点BH算法
中点Bresenham画椭圆计算机图形学04——中点BH绘制椭圆
中点BH算法绘制任意斜率直线计算机图形学05——中点BH算法绘制任意斜率的直线
中点Bresenham画圆计算机图形学06——中点BH算法画圆
有效边表法的多边形扫描转换计算机图形学07——有效边表法绘制填充多边形
中点BH算法绘制抛物线 100 x = y 2 100x = y^2 100x=y2计算机图形学08——中点BH绘制抛物线
二维观察之点的裁剪计算机图形学09——二维观察之点裁剪
二维观察之线的裁剪计算机图形学10——二维观察之线裁剪
二维观察之多边形的裁剪计算机图形学11——二维观察之多边形裁剪
二维图形的几何变换计算机图形学12——二维图形几何变换
三维图形的几何变换计算机图形学13——三维图形几何变换
三维图形的投影变换计算机图形学14——三维图形投影变换

计算机图形学(英语:computer graphics,缩写为CG)是研究计算机在硬件和软件的帮助下创建计算机图形的科学学科,是计算机科学的一个分支领域,主要关注数字合成与操作视觉的图形内容。虽然这个词通常被认为是指三维图形,事实上同时包括了二维图形以及影像处理。


一、算法原理

首先,基本思路还是将抛物线分为斜率 k ≥ 1 k\\geq1 k1 k < 1 k<1 k<1 两种情况。

左边为 k > 1 k>1 k>1 的情况(针对本问题 x ≤ 25 x\\leq25 x25),右边为 k < 1 k<1 k<1 的情况(x>25)。


二、OpenGL代码实现

// 绘制抛物线 100*x = y^2
void MidBhParabola() 
	int x = 0;
	int y = 0;
	double d = 10 / sqrt(2) - 1;
	// 开始绘制
	glColor3f(0.0f, 1.0f, 0.0f);			// 设置颜色为绿色进行填充
	glBegin(GL_POINTS);
	glVertex2i(x, y);	// 绘制(0, 0)点
	// k>1 的情况
	while (x <= 25) 		
		// 更新d
		if (d < 0) 
			d += 10 * (sqrt(x + 1.5) - sqrt(x + 0.5)) - 1;
		
		else 
			d -= 1;
		
		y++;
		// 根据 d 的值更新x
		if (d < 0) 
			x++;
		
		glVertex2i(x, y);
		glVertex2i(x, -y); // 二分画圆
	
	// k<=1的情况
	d = 10 * sqrt(25 + 1) - (50 + 0.5);
	while (x <= 250) 
		// 更新d
		if (d < 0) 
			d += 10 * (sqrt(x + 2) - sqrt(x + 1));
		
		else 
			d += 10 * (sqrt(x + 2) - sqrt(x + 1.5)) - 1;
		
		// 更新x,y
		x++;
		if (d >= 0) 
			y++;
		
		glVertex2i(x, y);
		glVertex2i(x, -y); // 二分画抛物线
	
	glEnd();


三、效果展示


the end……

中点BH算法绘制抛物线( 100 x = y 2 100x = y^2 100x=y2到这里就要结束啦~~到此既是缘分,欢迎您的点赞评论收藏关注我,不迷路,我们下期再见!!

😘😘😘 我是Cherries,一位计算机科班在校大学生,写博客用来记录自己平时的所思所想!
💞💞💞 内容繁杂,又才疏学浅,难免存在错误,欢迎各位大佬的批评指正!
👋👋👋 我们相互交流,共同进步!

:本文由非妃是公主发布于https://blog.csdn.net/myf_666,转载请务必标明原文链接:https://blog.csdn.net/myf_666/article/details/128234564

计算机图形学输出图元_6_OpenGL曲线函数_5_其他曲线

其他曲线

    许多曲线函数在对象建模、动画轨迹的描述、数据和函数的图形化以及其他图形应用中是十分有用的。常见的曲线包括圆锥曲线、三角和指数函数、概率分布、通用多项式和样条函数。这些曲线的显示可采用类似于前面讨论的圆和椭圆函数来生成。沿曲线轨迹的位置可直接从表达式y =f (x)或参数方程中得到。此外,还可以使用增量中点算法绘制用隐式函数f(x,y) = 0描述的曲线

    显示一指定的曲线函数的简单方法是使用直线段来逼近曲线。这时,对于要得到沿曲线轨迹的等距线段的端点位置,则可以使用参数表达式。也可以按曲线的斜率选择独立变量,而从显式表达式中生成等距位置。假如y = f(x)斜率的绝对值小于1,就选择x作为自变量并对相等的x增量计算y值;当斜率绝对值大于1时,要使用反函数x = f-1(Y)并在相同的y步长中计算x的值。

    使用直线或曲线逼近法可以图示离散坐标点的数据集,我们可以使用直线段来将离散点连结在一起,或采用线性回归(最小二乘法),从而通过单个直线来拟合数据集。非线性最小二乘法用来显示具有某些拟合函数(通常是多项式)的数据组。

    像圆和椭圆一样,许多函数具有对称性,从而可以减少曲线轨迹上坐标位置的计算量。例如,正态分布函数关于中心位置(均值)是对称的,沿正弦曲线一个循环的所有点可以从90°区间内的点生成

 

圆锥曲线

通常,我们可以使用二次方程来描述圆锥曲线(conic section):

 

其中,参数A, B, C, D, E和F的值决定所要显示的曲线类型。给定这组系数,就可以通过对判别式B2 = -4AC求值来确定所要生成的特定圆锥曲线:

 

例如,当A = B = 1, C=0, D = -2xc , E=-2yc和F=x2c+y2c-r2时,就得到圆方程(3.26 )方程(3.52)也能描述退化的圆锥曲线:点和直线。

       在有些应用中,圆弧和椭圆弧可以方便地用起始角和终止角表示,如图3.29所示。这些弧有时也用它们的端点坐标位置来定义。两种情况下我们都可以使用修改的中点方法来生成弧,或显示一组逼近直线段。

 

    椭圆、双曲线和抛物线在某些动画应用中有独特的用处。这些曲线可以描述受到地球引力、电磁场和原子力作用的物体的运行轨道和其他运动。例如:太阳系的平面轨迹是椭圆,进入均匀地球引力场的物体沿抛物线轨迹运动。对于负y方向作用的引力场,图3.30给出了标准位置上的抛物线轨迹。显示物体的抛物线轨迹方程可以写为:


常数a和b由物体的初始速度v0和均匀引力引起的加速度g决定。我们也可利用以秒计量的时间参数t.根据初始发射点的参数方程来描述这种抛物线轨迹:

 

其中,vx0和vy0是初始速度分量,g的值在地球表面约为980 cm/s2。沿抛物线轨迹的物体位置就可以按照选定的时间步长计算出来。

 

    双曲线运动(参见图3.31 )发生在有关带电粒子碰撞的问题以及某些引力问题中。例如,彗星或陨星绕太阳的运动是沿双曲线轨迹,并且向外层空间逃逸而从不返回。描述物体运动的特定分支(图3.31中的左边或右边曲线)取决于问题中涉及的力。我们可以将图3.31中双曲线(中心位于原点)的标准方程写为

 

对于左分支,x =< -rx;对于右分支,x>=rx。由于这个方程与标准椭圆方程(3.39)之间的不同仅在于x2和y2项的符号,因此只需对椭圆算法进行细小的改动就可以产生双曲线轨迹上的点。

 

抛物线和双曲线具有对徐轴。例如,由方程( 3.55)描述的抛物线关于下列轴是对称的:

 

中点椭圆算法中的方法可直接用于在下面的两个区域内获得抛物线和双曲线轨迹上对称轴一侧的点:

(1)曲线斜率的绝对值小于1; 

(2)曲线斜率的绝对值大于1。为此,首先选择方程(3.52)的合适形式,然后利用所选的函数来建立两个区域内决策参数的表达式。

 

多项式和样条曲线

x的n次多边形函数可以定义为

 

其中,n为非负整数,ak是常数且an != 0,当n = 2时得到二次曲线,n = 3时为三次多项式,n = 4时为四次曲线,等等;当n = 1时得到直线。多项式用于包括对象形状设计、动画轨迹的确定以及在离散数据点集合中数据趋向的图形化等许多图形应用中。

 

    对象形状或运动轨迹的设计中一般先通过指定少量的点来定义一个大概的曲线轮廓,然后利用多项式来拟合选定的点。曲线拟合的一种方法是在每对指定点之间构造三次多项式曲线段,每个曲线段可以通过参数形式描述:

 

     其中,参数u在0和1.0之间变化。参数方程中u的系数值根据曲线段的边界条件确定。边界条件之一是两个相邻曲线段具有公共端点,另一个条件是在边界上匹配两条曲线的斜率,以便得到连续的平滑曲线(参见图3.32)。利用多项式曲线段形成的这种连续曲线称为样条曲线(spline curve ),简称为样条。还有许多其他的建立样条曲线的方法,我们将在第8章研究各种样条的生成方法。

以上是关于计算机图形学08:中点BH算法绘制抛物线(100x = y^2)的主要内容,如果未能解决你的问题,请参考以下文章

计算机图形学:直线段扫描转换算法

计算机图形学输出图元_6_OpenGL曲线函数_4_中点椭圆算法(下)

计算机图形学实验一——基本图素的生成算法和图形填充

计算机图形学实验三——自由曲线的绘制消隐

贝塞尔曲线的全解析

计算机图形学-二维图形生成算法