c语言画实心坐标点,c-绘制实心圆的快速算法?
这是我的做法:
我正在使用具有两位精度的定点值(我们必须管理半点和半点的平方值)
如上一个答案所述,我也使用平方值而不是平方根。
首先,我在圆的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-绘制实心圆的快速算法?相关推荐
- matplot 坐标点_matplot绘制带箭头的坐标图
最近在写论文,遇到一些函数图像需要自己画,在matplot官网上找到一个例子,在此基础上进行修改. from mpl_toolkits.axisartist.axislines import Subp ...
- 51单片机二进制转bcd码c语言,16位二进制数转换成BCD码的的快速算法-51单片机...
在做而论道上篇博文中,回答了一个16位二进制数转换成BCD码的问题,给出了一个网上广泛流传的经典转换程序. . 说它经典,不仅是因为它已经流传已久,重要的是它的编程思路十分清晰,十分易于延伸推广.做而 ...
- 【Educoder作业】绘制炸弹轨迹 I——绘制一个坐标点
[EducoderEducoderEducoder作业]绘制炸弹轨迹 I--绘制一个坐标点 T1HelloWorldT1\ Hello\ WorldT1 Hello World print('Hell ...
- 百度地图鼠标绘制获取坐标点
开发有时需要在百度地图上拾取多个坐标,利用官方上的开源库,改造,在页面上打点或者画框获取坐标,如下图 选择工具 选择工具后在地图上画好,后就可以滚动到页面下方复制坐标点了,如下图 源码查看:https ...
- MATLAB画梯形并标注坐标点
MATLAB画梯形,其实思路很简单,先找出四个坐标点,然后点与点之间进行连线,即可画出梯形.MATLAB代码如下: clc,clear; x=[0 3 2 0]; y=[0 0 2 2]; line( ...
- c语言画猪程序,C/C++知识点之如何优雅的使用C语言绘制一只小猪佩奇
本文主要向大家介绍了C/C++知识点之如何优雅的使用C语言绘制一只小猪佩奇,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助. 今天我们来用C语言画一只小猪佩奇---社会.社会.... ...
- linux c语言画太极,利用C语言的Cairo图形库绘制太极图实例教程
前言 可能许多人对直接用C语言绘图仍然停留在Turbo C的graphics.h年代,或许也有教育老化的原因,毕竟曾经的经典早已成往事,与其想尽各种办法寻找与其兼容的图形库,不如顺势拥抱灿烂的明天.C ...
- 用c语言绘制五角星图形,用c语言画出一个五角星图案
用c语言画出一个五角星图案 感觉上五角星和六角星 的思路差不多,所以就不做重复劳动啦~嘿嘿O(∩_∩)O~ 以下公布一个非本人的代码,虽然感觉这个五角星画的不是很"正",但总体感觉 ...
- 用c语言绘制数学函数图像,用c语言画数学函数图像.DOC
用c语言画数学函数图像 时间:2007-02-13 作者:佚名 编辑:本站 点击: 2231 [评论] 符 outtextxy(CX+3,440-40*i,s); //以字符形式输出纵轴上的单位数字 ...
- python turtle库画图案-Python基础图形绘制库——turtle
(1).介绍 turtle库也叫海龟库,是turtle绘图体系的Python实现.turtle库是Python语言的标准库之一,是入门级的图形绘制函数库. turtle绘图体系:也叫海龟绘图系统,它是 ...
最新文章
- leangoo大讲堂:scrum敏捷开发实战——深圳站
- CSS的一些基础知识
- ServiceModel 元数据实用工具 (Svcutil.exe)
- Socket编程(C语言实现)—— Nginx支持Socket转发
- html5 建筑物模型,基于HTML5的建筑物阴影实时模拟
- 11.6 mpstat:CPU信息统计
- 【Python爬虫】微信公众号历史文章和文章评论API分析
- CCF202009-1 称检测点查询
- Mysql基础知识:创建、查看、修改和删除表
- sqlalchemy 聚合
- 2068个开源的网站模板
- 执行董事和董事长有什么区别
- 【ps功能精通】3.图层和选取
- 《GEB-EGB》-人工智能
- 大数据---旅游业的新挑战
- pygame的小飞机游戏终于完成了
- 七夕送礼必备好物,品质好的蓝牙耳机分享
- echarts xy轴虚线展示 字体颜色修改
- 软件工程-可行性研究
- AD7606调试笔记:采集多路不正常,少采集几路就正常