椭圆的绘制算法

news/2024/11/8 9:50:39/

问题描述

已知椭圆的长半轴a和短半轴b,以及椭圆的中心(xc,yc),绘制椭圆像素图。

中点椭圆算法

中点椭圆算法与圆的绘制算法类似,也是在某一区域范围内,单位间隔取样,确定离指定椭圆最近的像素位置,然后通过椭圆的对称性,绘制其他像素点。对于椭圆中心不在原点处的情况,同样地我们通过平移将xc加到x,yc加到y,从而将计算出的每个位置(x,y)移动相应的屏幕位置。

与圆的对称性不同,椭圆在八分象限之间是不对称的,我们必须计算一个象限中椭圆曲线的像素位置,再由对称性得到其他三个象限的像素位置。

如下图所示,在第一象限内,当过椭圆上一点的斜率k>-1时,在x方向取单位步长,即从位置(0,b)开始,在第一象限沿椭圆路径,当前点取(xk,yk)时,x步进一个单位,判断下一点取(xk+1,yk)还是(xk+1,yk-1);反之当k<-1时,在y方向取单位步长,当前点取(xk,yk),判断下一点取(xk,yk+1)还是取(xk-1,yk+1)。因此我们需要按照k>-1和k<-1将第一象限的椭圆划分成两个区域讨论。

(注:我的文章都是用word写的,从word直接复制到博客,会出现很多格式问题,本人偷懒就直接从word截图粘贴到博客,阅读体验会降低,请谅解!)

                                                                                      图1 椭圆的处理区域

 

 

void ellipseMidPoint(const int xc, const int yc, const int a, const int b)
{int x = 0;int y = b;int p = round(b*b-a*a*b+0.25*a*a);int px = 0;int py = a*a*y;SetPixel(x+xc, y+yc);SetPixel(x+xc, -y+yc);while (px < py){if (p>0){p += (2*b*b*x - 2*a*a*y + 3*b*b + 2*a*a);y--;}else{p += (2*b*b*x + 3*b*b);}x++;px = b*b*x;py = a*a*y;SetPixel(x+xc, y+yc);SetPixel(x+xc, -y+yc);SetPixel(-x+xc, -y+yc);SetPixel(-x+xc, y+yc);}p = round(b*b*(x+0.5)*(x+0.5) + a*a*(y-1)*(y-1)-a*a*b*b);while (y>0){if(p<0){p += (b*b*(2*x+2)-a*a*(2*y-3));x++;}else{p += (3*a*a-2*a*a*y);}y--;SetPixel(x+xc, y+yc);SetPixel(x+xc, -y+yc);SetPixel(-x+xc, -y+yc);SetPixel(-x+xc, y+yc);}
}

 

 


http://www.ppmy.cn/news/233141.html

相关文章

椭圆拟合

1.最小二乘拟合 最小二乘拟合是一种数学上的近似和优化&#xff0c;利用已知的数据得出一条直线或者曲线&#xff0c;使之在坐标系上与已知数据之间的距离的平方和最小。 2.RANSAC算法 参见王荣先老师的博文 http://www.cnblogs.com/xrwang/archive/2011/03/09/ransac-1.html 3…

椭圆中心到椭圆切线的距离

本文将要讨论的是椭圆中心到椭圆切线的距离公式&#xff0c;在求这个距离之前&#xff0c;我们首先要知道两个定理。 定理1&#xff1a;椭圆 上的点到椭圆左&#xff0c;右焦点的距离分别是和&#xff0c;其中是椭圆的离心率。 定理2&#xff1a;椭圆&#xff08;1&#xff09;…

椭圆积分

转载自&#xff1a;http://blog.sina.com.cn/s/blog_3feefc7c0102xv37.html

四轴飞行器的运动原理

四旋翼飞行器通过调节四个电机转速来改变旋翼转速&#xff0c;实现升力的变化&#xff0c;从而控制飞行器的姿态和位置。四旋翼飞行器是一种六自由度的垂直升降机&#xff0c;但只有四个输入力&#xff0c;同时却有六个状态输出&#xff0c;所以它又是一种欠驱动系统。 以四轴&…

椭圆 / 椭圆的画法

原文链接&#xff1a; https://www.lfhacks.com/t/draw-ellipse 在现实生活中如何画 椭圆 &#xff1f;椭圆并不是由圆压扁而来&#xff0c;而是要符合一定的规则才能称为椭圆。现实生活中如果有画椭圆的需求&#xff0c;应该按照固定的方法作图。本文介绍一些绘制椭圆的方法。…

误差椭圆

原文链接&#xff1a;https://blog.csdn.net/u010182633/article/details/45924061 介绍 在这篇文章中&#xff0c;我将展示如何绘制二维正态分布数据的误差椭圆&#xff0c;又名置信椭圆。误差椭圆代表高斯分布的等值轮廓线&#xff0c;并允许可视化一个2D置信区间。下图显示了…

Ellipse(椭圆)

原滋原味的英文介绍&#xff0c;挺有意思&#xff01; http://mathworld.wolfram.com/Ellipse.html An ellipse is a curve that is the locus of all points in the plane the sum of whose distances and from two fixed points and (the foci) separated by a distance…

圆及椭圆拟合

在opencv学习中&#xff0c;圆和椭圆的拟合是必不可少的&#xff0c;下面我就用一个简单的例子介绍一下我们如何用opencv来拟合。 实验描述&#xff1a; 输入&#xff1a;图像文件seal1.jpg、seal2.jpg、coin1.jpg 任务&#xff1a; 尝试将上述三个图像中圆或椭圆信息提取出来…