在前一篇教程我们利用绘制矩形功能绘制了一个城市,接下来我们讲解另外一个同样重要且基础的图形----圆形。并一起看看该图形能绘制哪些应用呢。

绘制圆形相关函数如下:

//圆心坐标(nXCenter,nYCenter),半径为nRatio//绘无填充制圆
void circle( int nXCenter, int nYCenter, int nRatio );//绘制填充圆
void fillcircle( int nXCenter, int nYCenter, int nRatio );//绘制无边框填充圆
void solidcircle( int nXCenter, int nYCenter, int nRatio );//清空圆
void clearcircle( int nXCenter, int nYCenter, int nRatio );

只要提供圆心坐标及半径长度即可,与矩形一样,提供了四个函数分别绘制

1、仅有边框无填充--circle

2、边框加填充--fillcircle

3、无边框,仅有实心填充--solidcircle

4、用背景色清除圆区域--clearcircle

函数相对简单,不过因为圆形在真实世界太普遍以及实用了,所以在图形绘制中,圆形显得尤为重要。

下面我们以绘制太极图来演示圆的绘制,之所以使用太极图是因为虽然他看似简单,实际蕴含丰富。充分反映了祖先的智慧,同时也是完全使用圆形构造完成的。小小的太极图里包含了五个圆形。

绘制代码如下:

// Circle.cpp : 定义控制台应用程序的入口点。
//#include "../import/include/CGBoard.h"
#include "math.h"#ifdef _DEBUG
#pragma comment(lib,"../import/lib/SimpleCG_MDd.lib")
#else
#pragma comment(lib,"../import/lib/SimpleCG_MD.lib")
#endifint g_nWidth = 400;      //画面宽度
int g_nHeight= 400;        //画面高度//绘制太极图
void DrawProcess()
{//外圆setfillcolor(0);circle(200,200,100);line(200,100,200,300);floodfill(250,200,0,0);//黑色半圆solidcircle(200,150,50);//设置填充色为白色setfillcolor(RGB(255,255,255));//白色半圆solidcircle(200,150,25);//小白圆solidcircle(200,250,50);//小黑圆setfillcolor(0);solidcircle(200,250,25);}
int _tmain(int argc, _TCHAR* argv[])
{srand(GetTickCount());//初始化if( !ShowingBoard(g_nWidth,g_nHeight, DrawProcess))return 1;//关闭图库CloseBoard();return 0;
}

运行图如下:

下面我们让太极图转动起来,反映的是阴阳转化的关系。由于我们还没学到旋转的函数,只能通过手动运算旋转点的方式编写,代码如下:

// Circle.cpp : 定义控制台应用程序的入口点。
//#include "../import/include/CGBoard.h"
#include "math.h"#ifdef _DEBUG
#pragma comment(lib,"../import/lib/SimpleCG_MDd.lib")
#else
#pragma comment(lib,"../import/lib/SimpleCG_MD.lib")
#endifint g_nWidth = 400;      //画面宽度
int g_nHeight= 400;        //画面高度
//旋转的太极图
void Taiji( int nX, int nY, int nRatio, float fAngle )
{int nPtX=0;int nPtY=0;nPtX = cos(fAngle)*nRatio;nPtY = sin(fAngle)*nRatio;//外圆circle(nX,nY,nRatio);line(nX+nPtX,nY-nPtY,nX-nPtX,nY+nPtY);floodfill(nX+5*sin(fAngle),nY+5*cos(fAngle),0,0);//黑色半圆solidcircle(nX+nPtX/2,nY-nPtY/2,nRatio/2);//设置填充色为白色setfillcolor(RGB(255,255,255));//小白圆solidcircle(nX+nPtX/2,nY-nPtY/2,nRatio/4);//白色半圆solidcircle(nX-nPtX/2,nY+nPtY/2,nRatio/2);//小黑圆setfillcolor(0);solidcircle(nX-nPtX/2,nY+nPtY/2,nRatio/4);
}//绘制太极图
void DrawProcess()
{bool bIsRunning = true;float fAngle=0;while(bIsRunning){Taiji(200,200,100,fAngle);fAngle+=0.05;Sleep(50);}
}
int _tmain(int argc, _TCHAR* argv[])
{//初始化if( !ShowingBoard(g_nWidth,g_nHeight, DrawProcess))return 1;//关闭图库CloseBoard();return 0;
}

为了绘制运动太极,将太极绘制放入单独函数供调用,而且设置了旋转角度参数,方便绘制转动的太极。运行图与上图差别不大,就不贴效果图了,大家可以自行运行看看。

第二个例子我们展示一下奥运五环的绘制。绘制环可以先画一个圆,然后在里面用clearcircle用小一点的半径清除掉里面就能得到一个环形,不过我们可以用更简单的直接设置笔宽来实现。

setlinewidth(15);

关于设置笔宽及填充,例如颜色,大小之类的设置函数后面会讲到,在这里先用上。

代码如下:

// Circle.cpp : 定义控制台应用程序的入口点。
//#include "../import/include/CGBoard.h"
#include "math.h"#ifdef _DEBUG
#pragma comment(lib,"../import/lib/SimpleCG_MDd.lib")
#else
#pragma comment(lib,"../import/lib/SimpleCG_MD.lib")
#endifint g_nWidth = 400;      //画面宽度
int g_nHeight= 400;        //画面高度//绘制太极图
void DrawProcess()
{setlinewidth(15);setlinecolor(RGB(50,140,210));circle(60,100,50);setlinecolor(RGB(240,160,50));circle(120,150,50);setlinecolor(RGB(0,20,40));circle(180,100,50);setlinecolor(RGB(80,170,70));circle(240,150,50);setlinecolor(RGB(200,80,70));circle(300,100,50);
}
int _tmain(int argc, _TCHAR* argv[])
{//初始化if( !ShowingBoard(g_nWidth,g_nHeight, DrawProcess))return 1;//关闭图库CloseBoard();return 0;
}

运行效果图:

审核说版权不明,不知道是不是这个,就不放图片试试了

细心的读者可能会发现乍一看似乎还可以,仔细看的话就会发现这个五环是有问题的,因为环与环之间并不是扣在一起,我们后面介绍到弧的绘制时再来完善它,画圆函数是没办法实现的。

最后我们再用圆绘制一个小甲虫,并祝大家节日快乐,明天就是儿童节了。

// Circle.cpp : 定义控制台应用程序的入口点。
//#include "../import/include/CGBoard.h"
#include "math.h"#ifdef _DEBUG
#pragma comment(lib,"../import/lib/SimpleCG_MDd.lib")
#else
#pragma comment(lib,"../import/lib/SimpleCG_MD.lib")
#endifint g_nWidth = 400;      //画面宽度
int g_nHeight= 400;        //画面高度void DrawProcess()
{setlinewidth(3);//头setfillcolor(RGB(250,240,200));fillcircle(280,110,30);//身setfillcolor(RGB(250,40,10));fillcircle(200,200,100);fillcircle(285,115,8);curveline(270,130,200,140,4);curveline(200,140,210,100,-4);curveline(200,140,120,260,14);//斑点setfillcolor(0);solidcircle(170,130,25);solidcircle(220,170,30);solidcircle(280,180,10);solidcircle(260,230,25);solidcircle(140,200,30);solidcircle(180,250,25);solidcircle(180,180,10);solidcircle(220,260,10);//触角solidcircle(250, 70, 6);solidcircle(280, 60, 6);line(250, 70, 260, 85 );line(280, 60, 275, 80 );setfillcolor(RGB(250,240,200));solidcircle(282,108,9);//眼睛setfillcolor(0);solidcircle(270,110,6);solidcircle(290,100,6);
}
int _tmain(int argc, _TCHAR* argv[])
{//初始化if( !ShowingBoard(g_nWidth,g_nHeight, DrawProcess))return 1;//关闭图库CloseBoard();return 0;
}

以上通过几个例子演示了圆形的绘制及运用,大家可以参考并熟练圆形函数的应用,发挥想象,多多练习,下一篇将探讨椭圆的绘制方法及使用。

SimpleCG绘图函数(4)--绘制圆相关推荐

  1. C#图像处理-OpenCVSharp教程(八) OpenCVSharp基本绘图函数:绘制线、圆、矩形、椭圆、文字等

    本文作者Color Space,文章未经作者允许禁止转载! 本文将介绍OpenCVSharp基本绘图函数:绘制线.圆.矩形.椭圆.文字等! 实现效果: 代码演示: using System; usin ...

  2. 【计算机图形学课程】一.MFC基本绘图函数使用方法

    这是最近我<计算机图形学>课程实践编程课介绍的相关知识,主要是想通过MFC C++绘图,让学生体会下图形学相关的编程及简单的图形绘制,同时非常佩服学生的想象力,他们做得真的不错.希望这篇基 ...

  3. EasyX---快速入门---(一)基本绘图与文字绘制

    先上导图 基本说明 EasyX是针对C++的图形库,可以帮助C/C++初学者快速上手图形和游戏编程 EasyX原理 基于Windows图形编程,将Windows下的复杂程序过程进行封装,将Window ...

  4. 一览R基础包的六个高级绘图函数(盒型boxplot|条形barplot|直方hist|饼pie|dotchart|coplot)...

    除了数理统计,今天我们继续聊一下R语言的另一个任务:绘图. 注意:我们公众号的每一次发文尽量列出一个小系列.如果九阳神功有10层,能以一篇文章写10层,绝不一篇写一层.分散写10篇,追求字典.工具的性 ...

  5. C语言Arc函数画圆弧,用Canvas的arc函数绘制圆和图形

    Canvas没有circle函数来画一个圆.在Canvas绘图API中,提供了一个函数来绘制不同的弧,包括圆.arc函数可接受以下参数,具体说明参见表 把角度转换为弧度 arc函数使用的angle参数 ...

  6. python cartopy绘制北极/python绘图函数封装/python气象绘图

    因为研究需要大量出图,于是将常用的绘图函数封装,提高绘图效率. 绘图函数 函数主要有两部分组成: 1.完成解决北极投影重叠的z_masked函数,详情参见python cartopy极地投影重叠解决 ...

  7. 好用的三维绘图软件CREO学习绘制圆

    这篇我们来学习绘制圆 圆在这个位置,圆的绘制共包含四个绘制的方法 1.圆心和点 选择圆心和点后,在绘图区域选择一个点作为绘制一个圆的圆心,向外拖动,就可以绘制出一个圆,然后点击鼠标的中键或者键盘的ES ...

  8. matlab plot绘图函数官方详解

    plot: 二维线图函数 语法 plot(X,Y) plot(X,Y,LineSpec) plot(X1,Y1,...,Xn,Yn) plot(X1,Y1,LineSpec1,...,Xn,Yn,Li ...

  9. flash 绘图API:绘制基础的图形

    flash 的绘图API 函数是很强大的绘图工具,能够创建出很多神奇的效果.最近偶然发现了一些不错的程序,测试了一下感觉很有趣.这部分不算很难,主要懂借用他的命令,加上自己一点创意就能发挥出意想不到的 ...

最新文章

  1. GATB的使用小例子test.cpp
  2. MyEclipse项目中的包层次视图
  3. 开学季:当当大促的额外优惠又来啦!150 买 400的书!搓搓搓~
  4. 解决MySQL删除外键时报错Error Code: 1091. Can‘t DROP ‘XXX‘; check that column/key exists
  5. Arrays工具类(jre中基本类库提供的工具类)
  6. luogu P2516 [HAOI2010]最长公共子序列
  7. python xlwt写入已有表_Python中,添加写入数据到已经存在的Excel文件
  8. C#调用存储过程详解
  9. golang切片转为字符串,字符串转切片
  10. 如何获取select中的value、text、index相关值 如何获取单选框中radio值 触发事件 radio 默认选中...
  11. sel - performSelector - NSSelectorFromString()
  12. (三)Mybatis总结之动态sql
  13. php ajax怎么拿id,php ajax无刷新分页,支持id定位
  14. excel筛选排序从小到大_Excel按颜色排序或筛选
  15. 2021高校毕业礼物,竞争太激烈了!
  16. vue项目中如何下载excel表格模板
  17. 网银支付 加密解密说明
  18. C++ 应用程序无法正常启动0xc000007b
  19. Android 仿2016版京东筛选
  20. 终于给自己买了台电脑

热门文章

  1. vb中的msgbox的用法
  2. C语言自由定制表白电子相册
  3. EPSON打印机清零复位操作
  4. vuepress 集成第三方搜索引擎
  5. 雀巢和星巴克签订星巴克包装消费品和餐食服务产品的全球永久许可协议
  6. 【编程】代码片段 - 日期时间
  7. 每天5分钟玩转 OpenStack
  8. 商务橘色年终工作总结PPT模板
  9. Python爬虫日记-解释def __init__(self, *args, **kwargs)
  10. LeetCodeOJ.Number of Digit One