这是我的做法:

我正在使用具有两位精度的定点值(我们必须管理半点和半点的平方值)

如上一个答案所述,我也使用平方值而不是平方根。

首先,我在圆的1/8部分中检测到圆的边界限制。 我正在使用这些点的对称性绘制圆的4个“边界”。 然后,我在圆圈内绘制正方形。

与中点圆算法不同,该算法将在直径均匀的情况下工作(并且在实数直径情况下也有一些变化)。

如果我的解释不清楚,请原谅我,我是法国人;)

void DrawFilledCircle(int circleDiameter, int circlePosX, int circlePosY)

{

const int FULL = (1 << 2);

const int HALF = (FULL >> 1);

int size = (circleDiameter << 2);// fixed point value for size

int ray = (size >> 1);

int dY2;

int ray2 = ray * ray;

int posmin,posmax;

int Y,X;

int x = ((circleDiameter&1)==1) ? ray : ray - HALF;

int y = HALF;

circlePosX -= (circleDiameter>>1);

circlePosY -= (circleDiameter>>1);

for (;; y+=FULL)

{

dY2 = (ray - y) * (ray - y);

for (;; x-=FULL)

{

if (dY2 + (ray - x) * (ray - x) <= ray2) continue;

if (x < y)

{

Y = (y >> 2);

posmin = Y;

posmax = circleDiameter - Y;

// Draw inside square and leave

while (Y < posmax)

{

for (X = posmin; X < posmax; X++)

setPixel(circlePosX+X, circlePosY+Y);

Y++;

}

// Just for a better understanding, the while loop does the same thing as:

// DrawSquare(circlePosX+Y, circlePosY+Y, circleDiameter - 2*Y);

return;

}

// Draw the 4 borders

X = (x >> 2) + 1;

Y = y >> 2;

posmax = circleDiameter - X;

int mirrorY = circleDiameter - Y - 1;

while (X < posmax)

{

setPixel(circlePosX+X, circlePosY+Y);

setPixel(circlePosX+X, circlePosY+mirrorY);

setPixel(circlePosX+Y, circlePosY+X);

setPixel(circlePosX+mirrorY, circlePosY+X);

X++;

}

// Just for a better understanding, the while loop does the same thing as:

// int lineSize = circleDiameter - X*2;

// Upper border:

// DrawHorizontalLine(circlePosX+X, circlePosY+Y, lineSize);

// Lower border:

// DrawHorizontalLine(circlePosX+X, circlePosY+mirrorY, lineSize);

// Left border:

// DrawVerticalLine(circlePosX+Y, circlePosY+X, lineSize);

// Right border:

// DrawVerticalLine(circlePosX+mirrorY, circlePosY+X, lineSize);

break;

}

}

}

void DrawSquare(int x, int y, int size)

{

for( int i=0 ; i

DrawHorizontalLine(x, y+i, size);

}

void DrawHorizontalLine(int x, int y, int width)

{

for(int i=0 ; i

SetPixel(x+i, y);

}

void DrawVerticalLine(int x, int y, int height)

{

for(int i=0 ; i

SetPixel(x, y+i);

}

要使用非整数直径,可以提高定点精度或使用双精度值。根据dY2 +(ray-x)*(ray-x)和ray2(dx²+dy²和r²)之间的差异,甚至应该可以进行某种抗锯齿处理

c语言画实心坐标点,c-绘制实心圆的快速算法?相关推荐

  1. matplot 坐标点_matplot绘制带箭头的坐标图

    最近在写论文,遇到一些函数图像需要自己画,在matplot官网上找到一个例子,在此基础上进行修改. from mpl_toolkits.axisartist.axislines import Subp ...

  2. 51单片机二进制转bcd码c语言,16位二进制数转换成BCD码的的快速算法-51单片机...

    在做而论道上篇博文中,回答了一个16位二进制数转换成BCD码的问题,给出了一个网上广泛流传的经典转换程序. . 说它经典,不仅是因为它已经流传已久,重要的是它的编程思路十分清晰,十分易于延伸推广.做而 ...

  3. 【Educoder作业】绘制炸弹轨迹 I——绘制一个坐标点

    [EducoderEducoderEducoder作业]绘制炸弹轨迹 I--绘制一个坐标点 T1HelloWorldT1\ Hello\ WorldT1 Hello World print('Hell ...

  4. 百度地图鼠标绘制获取坐标点

    开发有时需要在百度地图上拾取多个坐标,利用官方上的开源库,改造,在页面上打点或者画框获取坐标,如下图 选择工具 选择工具后在地图上画好,后就可以滚动到页面下方复制坐标点了,如下图 源码查看:https ...

  5. MATLAB画梯形并标注坐标点

    MATLAB画梯形,其实思路很简单,先找出四个坐标点,然后点与点之间进行连线,即可画出梯形.MATLAB代码如下: clc,clear; x=[0 3 2 0]; y=[0 0 2 2]; line( ...

  6. c语言画猪程序,C/C++知识点之如何优雅的使用C语言绘制一只小猪佩奇

    本文主要向大家介绍了C/C++知识点之如何优雅的使用C语言绘制一只小猪佩奇,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助. 今天我们来用C语言画一只小猪佩奇---社会.社会.... ...

  7. linux c语言画太极,利用C语言的Cairo图形库绘制太极图实例教程

    前言 可能许多人对直接用C语言绘图仍然停留在Turbo C的graphics.h年代,或许也有教育老化的原因,毕竟曾经的经典早已成往事,与其想尽各种办法寻找与其兼容的图形库,不如顺势拥抱灿烂的明天.C ...

  8. 用c语言绘制五角星图形,用c语言画出一个五角星图案

    用c语言画出一个五角星图案 感觉上五角星和六角星 的思路差不多,所以就不做重复劳动啦~嘿嘿O(∩_∩)O~ 以下公布一个非本人的代码,虽然感觉这个五角星画的不是很"正",但总体感觉 ...

  9. 用c语言绘制数学函数图像,用c语言画数学函数图像.DOC

    用c语言画数学函数图像 时间:2007-02-13 作者:佚名 编辑:本站 点击: 2231 [评论] 符 outtextxy(CX+3,440-40*i,s); //以字符形式输出纵轴上的单位数字 ...

  10. python turtle库画图案-Python基础图形绘制库——turtle

    (1).介绍 turtle库也叫海龟库,是turtle绘图体系的Python实现.turtle库是Python语言的标准库之一,是入门级的图形绘制函数库. turtle绘图体系:也叫海龟绘图系统,它是 ...

最新文章

  1. leangoo大讲堂:scrum敏捷开发实战——深圳站
  2. CSS的一些基础知识
  3. ServiceModel 元数据实用工具 (Svcutil.exe)
  4. Socket编程(C语言实现)—— Nginx支持Socket转发
  5. html5 建筑物模型,基于HTML5的建筑物阴影实时模拟
  6. 11.6 mpstat:CPU信息统计
  7. 【Python爬虫】微信公众号历史文章和文章评论API分析
  8. CCF202009-1 称检测点查询
  9. Mysql基础知识:创建、查看、修改和删除表
  10. sqlalchemy 聚合
  11. 2068个开源的网站模板
  12. 执行董事和董事长有什么区别
  13. 【ps功能精通】3.图层和选取
  14. 《GEB-EGB》-人工智能
  15. 大数据---旅游业的新挑战
  16. pygame的小飞机游戏终于完成了
  17. 七夕送礼必备好物,品质好的蓝牙耳机分享
  18. echarts xy轴虚线展示 字体颜色修改
  19. 软件工程-可行性研究
  20. AD7606调试笔记:采集多路不正常,少采集几路就正常

热门文章

  1. 联想y7000 Linux显卡驱动,联想Y7000安装显卡驱动
  2. 检测周转时间 TAT :TURN-AROUND TIME
  3. 计算机不能上网的故障和解决办法,电脑无法上网的原因分析及解决办法
  4. 初中英语多词性单词怎么办_初中英语单词按词性分类表
  5. nvidia windows linux,NVIDIA首发OpenGL 3.1驱动 全面支持Windows/Linux
  6. 鸟哥的Linux私房菜
  7. 自助装机配置专家点评
  8. Linux系统平均负载的含义
  9. Pwn level题目
  10. 如何打印网上的文章资料,网上文章怎么打印