zoukankan      html  css  js  c++  java
  • 计算机图形学中点法画圆教程

    中点画圆法

    相关阅读:易懂的Bresenham 布雷森汉姆算法画圆的原理与Python编程实现教程

    看下面这个图,这就是一个像素一个像素的画出来的。我们平常的圆也是一个像素一个像素的画出来的,你可以试试在“画图”这个软件里面画一个圆然后放大很多倍,你会发现就是一些像素堆积起来的。
    在这里插入图片描述
    在这里插入图片描述
    我们看出来圆它是一个上下左右都对称,而且也是中心对称的。所以我们只用画好八分之一圆弧就可以,其他地方通过对称复制过去就好。
    在这里插入图片描述
    看下面这幅图,绿线夹住的那部分就是八分之一圆弧。注意我们是逆时针画圆的(即从水平那个地方即(r,0)开始画因为一开始我们只知道水平位置的像素点该放哪其他地方我们都不知道)。Bresenham 算法画完一个点(x,y)后注意x,y都是整数。他们代表的是x,y方向上的第几个像素。,它下一步有两个选择(x,y+1),(x-1,y+1)。也就是说y一定增加,但是x要么保持不变要么减一(你也可以让x一定增加y要么不变要么加一,其实差不多的)。当程序画到粉红色那个像素点的时候,程序选择下一步要绘制的点为(x-1,y+1)。当程序画到黄色的那个像素点时候,程序选择下一步要绘制的点为(x,y+1)。
    在这里插入图片描述
    我们看看粉色的那个点的下一步是如何抉择的。
    在这里插入图片描述

    我们把上面那个图进一步的放大,如下图所示。粉红色点坐标为(x,y),绿色坐标为(x-1,y+1),紫色坐标为(x,y+1),红色方块坐标为绿色点和紫色点的中点。我们知道中点到两个端点的距离是一样远的,而现在绿色点和紫色点所确定的线段的中点在圆弧外侧。这意味着圆弧离绿色那个点更近(为什么?判断远近的标准是线段与圆弧的交点,即下图灰色那个点与绿色和紫色点的远近)。绿色点和紫色点是粉红色点的下一步待选点。由于绿色的点离圆弧更近,所以确定下一步走到绿色点。回忆下我们是怎么判断远近的?我们是根据中点到底是在圆弧内还是圆弧外进行判断的。而中点坐标是(x-0.5,y+1)。判断是在圆内还是圆外的方法是pk+1=(x0.5)2+(y+1)2r2p_{k+1}=(x-0.5)^2+(y+1)^2-r^2是大于0还是小于0,注意这里我们作了一个假设即圆心坐标为(0,0).pk+1=(x0.5)2+(y+1)2r2p_{k+1}=(x-0.5)^2+(y+1)^2-r^2是大于0则中点在圆外,小于0则在圆内。
    在这里插入图片描述
    好了现在中点画圆法已经介绍完了,我们已经可以画出一个完整的圆了。但是由于它计算中点是有小数运算,我们知道浮点数运算是比整数运算满非常多的。于是Bresenham这个人就对中点画圆法进行了改进。

    知乎 https://www.zhihu.com/people/yuanmuou/activities
  • 相关阅读:
    Mac 中 go env 找不到 GOROOT
    git log 中想要更改历史 日志
    Go 中 生成随机数的坑 rand.seed() rand.intn()
    HTML 首页倒三角形导航块
    HTML overflow:hidden
    HTML padding ,margin
    JavaScript 通过关系找标签
    JavaScript Dom编程根据属性找节点
    javascript String
    HTML 标签包含规范,规避脱标流,图片和文字垂直居中对齐,
  • 原文地址:https://www.cnblogs.com/ailitao/p/11787560.html
Copyright © 2011-2022 走看看