IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言,利用平面直角坐标系画个圆 -> 正文阅读

[C++知识库]C语言,利用平面直角坐标系画个圆

? ?最近学习了C语言,做了一个用星号绘制矩形菜单的题,突然就想到如果要绘制圆应该怎么办。

想了很久,觉得可以利用平面直角坐标系绘制,于是就自己试了试。

源代码:

#include<stdio.h>
#include<math.h>


struct xy
{
?? ?double x;
?? ?double y;
};/*定义一个结构体,其意义是一个点的坐标。x表示横坐标,y表示纵坐标*/?

#define cr 1/*定义一个圆的半径*/?

double dt(struct xy * f1,struct xy * f2);//返回两点间距离,需要两个点坐标地址?

int main()
{
?? ?struct xy leftup;/*左上坐标*/?
?? ?struct xy rightdown;/*右下坐标*/
?? ?struct xy cen;/*圆心坐标*/?

?? ?leftup.x=0;
?? ?leftup.y=0;/*将左上坐标设置为(0,0)即位于坐标系圆点*/?

?? ?rightdown.x=2;
?? ?rightdown.y=-2;/*将右下坐标设置为(2,-2),其为第四象限一点*/

?? ?cen.x=1;
?? ?cen.y=-1;/*将圆心坐标设置为(1,-1),位于第四象限*/?
?
?? ?for(leftup.y=0;leftup.y>=rightdown.y;leftup.y-=0.2)?
?? ??? ?{
?? ??? ??? ?for(leftup.x=0;leftup.x<=rightdown.x;leftup.x+=0.1)
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?if(dt(&leftup,&cen)<=cr)
?? ??? ??? ??? ??? ??? ?printf("*");
?? ??? ??? ??? ??? ?else
?? ??? ??? ??? ??? ??? ?printf(" ");
?? ??? ??? ??? ?}
?? ??? ??? ?printf("\n");
?? ??? ?}
?? ?
?? ?getchar();
?? ?return 0;?
}?

double dt(struct xy * f1,struct xy * f2)?
{
?? ?return (sqrt((f1->x-f2->x)*(f1->x-f2->x)+(f1->y-f2->y)*(f1->y-f2->y)));
}

这里定义一个名为xy的结构体来表示坐标(x,y)这样的结构。用名为cr的常量定义这个圆的半径。

dt函数接受两个xy结构的地址,其数学意义是接受两个点的坐标。返回值是这两点坐标的距离,原理是两点坐标公式(根号下(x1-x2)方+(y1-y2)方)。

定义三组坐标,左上(liftup)、右下(rightdown)、圆心(cen),并设置它们的x与y。

为什么要定义左上和右下的坐标:

?上面的程序圆的半径为1,圆心坐标为(1,-1),我们需要从原点“拉”一个矩形能恰好包住这个圆,如图

根据这个图,就可以更好的理解接下来的两个for循环。

两个for循环覆盖的地方是矩形,在第二个for中,?将圆心与左上的坐标传递给dt函数,返回这两点间的距离。用if判断这一距离是否小于等于半径(圆内和圆上的所有点与圆心的连线长度小于等于半斤)。如果是则输出星号,不是输出空格。这样,一个处于矩形中的圆形就绘制好了。

改变两个for中每次递增(递减)的值的大小可以改变圆的“饱满度”。

为什么其中一个for递减0.2,一个递增0.1:

? ? ? ? 递增还是递减取决与想在哪个象限画圆,我使用的是第四象限,所以横坐标递增变化,纵坐标递减变化(但使用哪个象限没有区别,使用第四象限只是因为命令行的光标从左上到右下,用第四象限更好理解)。

? ? ? ? 当纵坐标的变化值是横坐标一半时才是一个圆,这是因为win7命令行中一般情况下显示的字符宽是长的两倍(一个方字被左右压扁了?)?

最后,再试试其他大小的圆

将递增(递减)的值减半,更“饱和”的圆:

半径为1,圆心(3,-1)的圆,递增递减值与第一个圆一样?

注意:这里圆心坐标发生变化,因为要矩形要包住圆,所以rightdown的值也需变化?

显而易见,rightdown.x=4;

? ? ? ? ? ? ? ? ? righrdown.y=-2;

就可以了。

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-06 09:26:01  更:2021-08-06 09:27:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/9 4:08:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码