003计算机图形学:圆的生成算法

平面几何中园的方程可以描绘为:

$(x-x_0)2+(y-y_{0})2=r^2$

其中$(x_0,y_0)$ 是圆心坐标,r为半径。为了简化可以先考虑圆心和坐标原点重合的情况,其他情况可以在此基础上平移得到。

由于圆的八分对策性,因此若已知圆弧上一点P(x,y),则可以得到另外7个对称点:(x,-y) (-x,y) (-x,-y) (-y,x) (-y,-x) (y,x) (y,-x) 。

中点画圆算法的步骤

决策参数取决于下一点$(x_k+1,y_k-1/2)$ 是在圆内还是圆外,如果圆内,则$y_k$更接近圆周边界,否则是$y_k-1$

  1. 输入圆半径r和圆心$(x_c,y_c)$,并得到圆周(圆心在原点)上的第一个点: $(x_0,y_0)=(0,r)$
  2. 计算决策参数的初始值: $p_0 = 5/4-r$
  3. 在每个$x_k$位置,从k=0开始,假设$p_k$<0,圆心在(0,0)的圆的下一个点为$(x_{k+1},y_k)$,并且 $p_{k+1} = p_k + 2x_{k+1}+1$ 否则,圆的下一点是$(x_k+1,y_k-1)$,并且 $p_{k+1} =p_k+2x_{k+1}+1-2y_{k+1}$ 其中 $2x_{k+1}=2x_k+2$且$2y_{k+1}=2y_k-2$。
  4. 确定在其他七个八分圆中的对称点。
  5. 将每个计算出的像素位置(x,y)移动到圆心在$(x_c,y_c)$的圆的路径上,并画坐标值: $x=x+x_c$, $y=y+y_c$
  6. 重复步骤3到步骤5,直至x>=y 。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我爱编程

Matplotlib入门

qiangbo.space/2018-04-06/matplotlib_l1/ 入门代码示例 import matplotlib.pyplot as plt ...

40390
来自专栏wym

《OpenCV 3计算机视觉 Python语言实现》 第七章 利用python_opencv检测人学习笔记

import cv2 import numpy as np def is_inside(o,i): ox,oy,ow,oh=o ix,iy,iw,ih=...

33430
来自专栏瓜大三哥

Matlab基本语法5

二维数据可视化 1.基本绘图函数 plot(y):如果是复数向量,则以实部为横坐标,以虚部为纵坐标 plot(x,y) plot(x,y,s):s表示字符串标记...

25350
来自专栏mathor

条件概率和乘法公式

34140
来自专栏非典型技术宅

Masonry的层层进阶1 基础写法:2 进阶写法3 自动装箱的写法4 Masonry的练习4.1 设置居中5. 更新及重建约束6. Masonry的两个宏

18820
来自专栏Pulsar-V

OpenCV图像处理基础(一)

图像处理基础,等大小图片相似度匹配 基于RGB通道的像素点相似度匹配算法思路 ? def compare_by_RGB(image_1,image_2): ...

403100
来自专栏贾志刚-OpenCV学堂

图像特征之局部二值模式

一:局部二值模式(LBP)介绍 局部二值模式(Local Binary Pattern)主要用来实现2D图像纹理分析。其基本思想是用每个像素跟它周围的像素相比...

42560
来自专栏用户2442861的专栏

matlab使用

x=[7.0  10.5  13.0  17.5  34.0  40.5  44.5  48.0  56.0  61.0  68.5  76.5  80.5...

14220
来自专栏前端新视界

使用 JavaScript 和 canvas 做精确的像素碰撞检测

原文:Pixel accurate collision detection with Javascript and Canvas 译者:nzbin 我正在开...

55490
来自专栏hadoop学习笔记

Hanlp中使用纯JAVA实现CRF分词

与基于隐马尔可夫模型的最短路径分词、N-最短路径分词相比,基于条件随机场(CRF)的分词对未登录词有更好的支持。本文(HanLP)使用纯Java实现CRF模型的...

15500

扫码关注云+社区

领取腾讯云代金券