这一方法是受到milo大神用C语言画心的启发而想到的。
代码如下:
#include<stdio.h> int main(){ for(double l=1;l>-1;l-=0.05,printf("\n")) for(double w=1;w>-1;w-=0.025) printf((l*l + w*w<=1)?"=":" "); }
效果:
事实上,代码的逻辑和背景知识是很简单的,就是从左到右,从上到下,用等号填充一个圆而已。
我们知道,圆方程的标准形式为:
当a b r的值确定后,圆也就完全确定了,为了简化方程,我们令a b 为0,r为1,则该圆全部落-1<x<1,-1<y<1的范围中,这也是l和w范围的来源。
接下来,很自然的就要思考字符数量了,一般而言,半角文字的长宽比为1:2(很汗颜,这也是从milo大神的文章中知道的),所以宽度增量设置为长度的一半就行了,如果为1:1的话,会得到一个椭圆。为什么增量设置为0.05和0.025呢?首先,增量的设置的越小,得到的圆就越圆,但是过大的话一屏无法显示完全,0.05和0.025是一个较优值,读者也可以尝试其他值。
整段代码中最难理解的一句应该是
printf((l*l + w*w<1)?"=":" ");
其实只是一个简单的双目运算符应用,意思是,如果该点落于圆中,则用“=”符号填充,否则用空格代替。
说到底只是数学的简单应用罢了,理论上来说,只要有相对应的图像方程,这段代码也可以进行相应的修改从而输出对应图像。读者有兴趣不妨试试:-)。
原文地址:https://www.cnblogs.com/haolanHwang/p/10084319.html
时间: 2024-10-14 06:52:39