实验二 圆的生成算法

作者: wangchuang2017 | 来源:发表于2018-08-01 08:40 被阅读9次

实验二 圆的生成算法

一、实验目的

1、 通过实验,进一步理解和掌握中点画圆算法的基本原理;

2、 掌握以上算法生成圆和圆弧的基本过程;

3、 掌握在C/C++环境下完成用中点算法圆或圆弧的绘制方法。

二、实验内容

用中点算法实现圆或圆弧的绘制。

三、实验步骤

1.算法分析:

中点画圆算法设计:

函数为F(x,y)=x2+y2-r2的构造圆,半径r等于鼠标响应事件得到的亮点坐标的距离,即r=sqrt((xb-xa)(xb-xa)+(yb-ya)(yb-ya))。

设d=F(x,y),判断d的符号,d=0的M点在圆上,d>0的M点在圆外,d<0的M点在圆内。

当x=0、y=r时,d的初值为1.25-r,绘制该点和其在八分圆上的另外7个点。

当d>=0时,d更新为d+2x+3,(x,y)更新为(x+1,y);当d<0时,d更新为d+2*(x-y)+5,(x,y)更新为(x+1,y+1)。

当x<y时,重复计算绘制点

2.效果截图

Image.png

3.算法实现代码:
void CJob2View::OnzhongdianCircle()
{
// TODO: Add your command handler code here

CDC *p=GetDC();
int radius=80,color=RGB(255,0,255);
int x0=300,y0=200,m,n;
double d;
m=0;
n=radius;
d=1.25-radius;
while(m<=n)
{
p->SetPixel(m+x0,n+y0,color);
p->SetPixel(n+x0,m+y0,color);
p->SetPixel(-m+x0,n+y0,color);
p->SetPixel(n+x0,-m+y0,color);
p->SetPixel(m+x0,-n+y0,color);
p->SetPixel(-n+x0,m+y0,color);
p->SetPixel(-m+x0,-n+y0,color);
p->SetPixel(-n+x0,-m+y0,color);
if(d<0) //选择T

        d+=2*m+3;

    else{                          //选择B
               
            d+=2*(m-n)+5;
            n--;
        }
    m++;
    }
    ReleaseDC(p);   

}

相关文章

  • 实验二 圆的生成算法

    实验二 圆的生成算法 一、实验目的 1、 通过实验,进一步理解和掌握中点画圆算法的基本原理; 2、 掌握以上算...

  • 图的存储与遍历

    图的存储与遍历 一.实验目的 掌握图的存储结构以及图的深度优先搜索遍历、最小生成树算法。 二.实验要求与内容 自构...

  • 算法创作实战03 - 用 MaxMSP 实现 L-system

    算法创作实战01 - 巴纳姆效应之随机星座实验 算法创作实战02 - 用 MaxMSP 生成随机颜色 好久不见~ ...

  • K-means算法学习(17-4-26)

    一、实验目的 1、学习K-means算法,理解算法的原理及其过程。 2、选择合适的实验,进行算法的仿真重现。 二、...

  • 算法实验二

    任务调度问题:在单处理器上具有期限和惩罚的单位时间任务调度问题;平衡树问题:实现3种树中的两种:红黑树,AVL树,...

  • 算法实验二

    2016-10-09# 参考题目 败者树k路归并(可运行) 第一次成功发表博客!!O(∩_∩)O哈!

  • 大数据算法系列13:最小生成树算法

    一. Kruskal算法 二. Prim算法 普里姆(Prim)算法,也是求加权连通图的最小生成树的算法。 基本思...

  • 实验三 椭圆的生成算法

  • 一.直线生成算法

    1、直线生成算法 截至:06月13日15:00 提交作业 通过实验,进一步理解和掌握DDA、中点算法和Bresen...

  • 2018-08-29

    1、直线生成算法 截至:06月13日15:00 提交作业 通过实验,进一步理解和掌握DDA、中点算法和Bresen...

网友评论

    本文标题:实验二 圆的生成算法

    本文链接:https://www.haomeiwen.com/subject/kgclvftx.html