怎样用计算机画太极,用IF函数画个太极图

原标题:用IF函数画个太极图

曾经写过一篇文字《用IF函数画个笑脸》,不知道还有多少同学记得,完成的效果图如下,用到的公式:

=IF((INT(SQRT((ROW()-50)^2+(COLUMN()-50)^2))=40)+(INT(SQRT((ROW()-30)^2+(COLUMN()-30)^2))=10)+(INT(SQRT((ROW()-30)^2+(COLUMN()-70)^2))=10)*(ROW()<30)+(INT(SQRT((ROW()-15)^2+(COLUMN()-30)^2))=10)*(ROW()<14)+(INT(SQRT((ROW()-15)^2+(COLUMN()-70)^2))=10)*(ROW()<14)+(INT(SQRT((ROW()-50)^2+(COLUMN()-50)^2))=30)*(ROW()>50)+((ROW()=50)*(COLUMN()>21)*(COLUMN()<79)),"█","")

f107108bcdd30d1140a43ae74a5daa3f.png

这次在这个笑脸的基础上再进一步,马上跟我一起动手做起来:

步骤一:

选中A1:CN95单元格区域

步骤二:

在公式编辑栏输入以下公式,然后注意,按结束

=IF((INT(SQRT((ROW()-50)^2+(COLUMN()-50)^2))=40)*(COLUMN()<=50)+(INT(SQRT((ROW()-50)^2+(COLUMN()-50)^2))<=40)*(COLUMN()>=50)*(INT(SQRT((ROW()-70)^2+(COLUMN()-50)^2))>20)*(INT(SQRT((ROW()-30)^2+(COLUMN()-50)^2))>10)+(INT(SQRT((ROW()-30)^2+(COLUMN()-50)^2))<=20)*(COLUMN()<=50)*(INT(SQRT((ROW()-30)^2+(COLUMN()-50)^2))>10)+(INT(SQRT((ROW()-70)^2+(COLUMN()-50)^2))=20)*(COLUMN()>=50)+(INT(SQRT((ROW()-30)^2+(COLUMN()-50)^2))=10)+(INT(SQRT((ROW()-70)^2+(COLUMN()-50)^2))<=10),"█","")

步骤三:

把行、列的高度与宽度拉小到一个合适的范围,太极图马上呈现:

262bb9386c0bd375e232b2f7c4be3882.png

还是照例一步一步的来分解看看,最核心的就是这个长长的公式,看过这个公式恐怕你也会怀疑人生。不用急,这样写公式明显很乱,我们在公式编辑栏做些小动作:

581bde59227c59bda3457c0998ecf63b.png

在找到合适的节点处,我们输入一个软换行,在公式中的软换行并不影响计算,但是瞬间就让公式的可读性大大增强。

我们发现它们最重要的结构几乎全都是:

INT(SQRT((ROW()-a)^2+(COLUMN()-b)^2))=r

再来复习下数学的知识:

在高中数学的解析几何,我们知道:

37ebf42320933a4657a7a8a1cea20e24.png

表示坐落于原点的一个圆,而

表示以坐标(a,b)为圆心,以r为半径的圆。

那么在Excel中,是以左右上角为坐标原点,向下及向为正数坐标值,表示为(Row,Column),如Z7单元格表示为(7,26)。

下面开始真正的分析这个太极图的构成了:

从最直观看它的形状,是由最外面一个完整的大圆,中间两个一半的中圆,以及最里面两个完整的小圆构成。

可是由于需要填充阴影,需要将图形进一步拆开,那就是最外面两个半圆,中间两个半圆,最里面两个完整小圆。

我们现在就逐个开始解释公式,其中INT表示向下取整,SQRT表示算术平方根:

公式1:

(INT(SQRT((ROW()-50)^2+(COLUMN()-50)^2))=40)*(COLUMN()<=50):“*”前的部分表示坐标原点在(50,50),半径为40的圆,(COLUMN()<=50)表示取列标小于50的部分,也就是说只要整个圆的左半部分外侧轮廓。

公式2:

(INT(SQRT((ROW()-50)^2+(COLUMN()-50)^2))<=40)*(COLUMN()>=50)*(INT(SQRT((ROW()-70)^2+(COLUMN()-50)^2))>20)*(INT(SQRT((ROW()-30)^2+(COLUMN()-50)^2))>10)

整个公式最长的部分,我们将它以“*”作为不同部分的分割点,将此公式分为4段:

第1段:

(INT(SQRT((ROW()-50)^2+(COLUMN()-50)^2))<=40)

坐标原点在(50,50),半径为40的圆,并且将半径小于40的部分填黑。

第2段:

(COLUMN()>=50)

表示只对圆的右半部分填黑。

第3段:

(INT(SQRT((ROW()-70)^2+(COLUMN()-50)^2))>20)

坐标原点在(70,50),半径大于20的部分可以填黑,也就是下半圆靠右侧半径小于20的部分是不填充的。

第4段:

(INT(SQRT((ROW()-30)^2+(COLUMN()-50)^2))>10)坐标原点在(30,50),半径大于10的部分可以填黑,也就是上半圆部分,中间的小圆外侧才填黑。

公式3:

(INT(SQRT((ROW()-30)^2+(COLUMN()-50)^2))<=20)*(COLUMN()<=50)*(INT(SQRT((ROW()-30)^2+(COLUMN()-50)^2))>10)

与之前的原理相同,表示坐标原点在(30,50),半径小于20并且大于10的左侧部分填黑,也就是上半圆左侧填黑的部分。

公式4:

(INT(SQRT((ROW()-70)^2+(COLUMN()-50)^2))=20)*(COLUMN()>=50)

坐标原点在(70,50),半径为20的圆,(COLUMN()>=50)表示取列标大于50的部分,也就是下面中间半圆的轮廓。

公式5:

(INT(SQRT((ROW()-30)^2+(COLUMN()-50)^2))=10)

表示坐标原点在(30,50),半径为10的圆,也就是上面小圆的轮廓。

公式6:

(INT(SQRT((ROW()-70)^2+(COLUMN()-50)^2))<=10)

表示坐标原点在(70,50),半径为10的圆,并且中间部分填黑,也就是下面填黑的小圆。

整个公式就这样被我们解读完成了。这里面再次强调最重要的一个知识点——公式的排版

一个好的逻辑,好的排版,纵然你的公式很长,我们仍然可以清晰的解读。

并且写公式的过程不要急于求成,一定先分析每一个部分的构造。我在完善这个公式的时候,就是将图形先切割出来每一个部分,最后再用公式慢慢调整细节。

图文作者:翟振福

ExcelHome学院讲师返回搜狐,查看更多

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
计算机图形学实验报告 SA03006073 魏思 介绍: 所有实验用一个MFC程序完成。组合成一个类似于图程序。 程序左边面板上有所有的按钮,要完成功能只要点击相应按钮然后在客户区操作就可以了。 实验一、图元的生成 实验要求: 能够生成直线、圆、椭圆、可以按照给定的边界顶点完成区域填充。 实验内容: 直线生成: 使用Bresenhan方法绘制直线。 使用介绍:鼠标点击左边按钮区域的直线按钮,然后在右边客户区域内点下鼠标左键,拖动鼠标倒你想要绘制的地方,就可以形成一条直线。这个直线是用MFC提供的CDC类的LinetTo() 函数绘制的。然后开始自己的直线生成算法来重新绘制,使用红色的线条来绘制直线,系统提供的直线函数是用来做参考的。 椭圆和圆的生成: 使用Bresenhan方法绘制椭圆和圆。 使用介绍:和直线基本类似,鼠标点击按钮区域的椭圆或者是圆按钮,然后在右边客户区域内点下鼠标左键,拖动鼠标倒你想要绘制的地方,就可以形成一个圆或者是椭圆。这个圆或者是椭圆是使用MFC提供的CDC类的Ellipse() 函数绘制的。然后开始自己的椭圆和圆生成算法来重新绘制,使用红色的线条来绘制,系统提供的椭圆或者是圆函数是用来做参考的。 区域填充: 使用边扫描填充法完成区域填充 使用介绍:鼠标点击按钮区域的正方形按钮,会弹出一个输入对话框。在这个对话框里,输入包含你要求填充的区域的线条坐标。格式如下(以正方形为例): (0,0),(100,0) (100,0),(100,100) (100,100),(0,100) (0,100),(0,0) 点击确定以后,首先根据输入的线条坐标绘制出区域的边界。然后使用填充算法来填充区域。 为了方便观察,采用了延时100毫秒显示下一个点。所以有缓慢的感觉,不是算法的问题。 实验二、样条曲线的生成
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值