前言:
当前看官们对“c语言求圆面积”可能比较注意,同学们都需要剖析一些“c语言求圆面积”的相关资讯。那么小编在网上收集了一些对于“c语言求圆面积””的相关知识,希望朋友们能喜欢,看官们一起来了解一下吧!先来看看效果:
拉动第一个滑动条,即选择将圆平均分成为多少份扇形。拉动第二个滑动条,则有对圆进行切割并拼接的效果。拼接完会显示第三个滑动条,向右拉动就可以显示提示。
想知道怎么做出以上效果吗?想自己动手做一做吗?
思路与指令
这个推导过程可分三步走:
先制作圆周弹开。在圆周取等分点,再由此构造等分的扇形。最后将右半部分的扇形进行旋转。
于是:
似懂非懂?那就接着看吧!
圆周弹开
可以直接在之前的“圆周弹开”源文件上进行制作。
其实就是输入这五条指令:
A = (0, 0)
r = 1
α = 滑动条(45.0001°, 89.9999°)
B = A + (0, r tan(α))
c = 圆弧(B, A, 旋转(A, 2π r / 距离(B, A), B))
详细解释,请见《砰!圆周弹开》。
注:滑动条(Slider)、圆弧(CircularArc)、旋转(Rotate)、距离(Distance)。
构造扇形
先对圆弧c进行n等分,其中,n必须是偶数(使得最终在上面、下面的扇形个数一样)。那么,让滑动条n的增量为2即可:
n = 滑动条(4, 40, 2)
由此,就可以构造出来n等分点(包括两端点):
l1 = 序列(描点(c, k), k, 0, 1, 1 / n)
注:序列指令等的解读。
那么,扇形如何构造呢?
由上图,发现这些扇形的圆心好像都在一段圆弧上!由此入手——这些扇形的半径、弧长相等,所以,这些扇形的圆心必定在一段圆弧上,假设在圆弧c'上。那么:
c'的圆心也是点B;c'与圆弧c等距,距离为r;由此可借助位似指令构造c',至于位似比应为1 - 1 / tan(α)。
于是可将c'构造出来:
c' = 位似(c, 1 - 1 / tan(α), B)
圆扇形( <圆心>, <点1>, <点2> )
那么扇形对应的圆心呢?
扇形的点1、点2是圆弧c的n等分点,而对应的圆心应是圆弧c'的2n等分点。
于是,可以将圆弧c'的所有2n等分点构造出来,需要用到哪个点再拿出来用:
l2 = 序列(描点(c', k), k, 0, 1, 1 / (2n))
l3 = 序列(圆扇形(l2(2k), l1(k), l1(k + 1)), k, 1, n / 2)
l4 = 序列(圆扇形(l2(2k), l1(k), l1(k + 1)), k, n / 2 + 1, n)
备注:l2(2k)表示列表l2的第2k个元素,相当于元素(l2, 2k)。
上面是第一种方法,也可以用第二种方法——需要哪些点,就只构造哪些点:
l2 = 序列(描点(c', k), k, 1 / (2n), 1, 1 / n)
l3 = 序列(圆扇形(l2(k), l1(k), l1(k + 1)), k, 1, n / 2)
l4 = 序列(圆扇形(l2(k), l1(k), l1(k + 1)), k, n / 2 + 1, n)
注:序列(Sequence)、描点(Point)、位似(Dilate)、圆扇形(CircularSector)。
旋转扇形
旋转中心就是最右边的蓝色扇形的右边的半径的中点,所以:
若用第一种方法,则:
C = 中点(l2(n), l1(n / 2 + 1))
若用第二种方法,则:
C = 中点(l1(n), l2(1))
于是旋转效果也可以做出来了:
t = 滑动条(-1, 1, 0.001)
t' = 如果(t < 0, 0, t)
l4' = 旋转(l4, t' * 180°, C)
其中,t'取值范围是由0到1,使旋转得以动态化。不过,为什么要写得这么麻烦呢?这是为了让t < 0的时候,可以控制α的变化,使得只需拉动滑动条t就可以演示动画。于是,还需更改下α的定义,即:
α = 如果(t == -1, 45.0001°, t ≥ 0, 89.9999°, 45° (t + 2))
注:中点(Midpoint)、如果(If)。
文本与美化
最后,为了效果更佳,可以设置一下滑动条的标题,并作几个文本。
指令
显示条件
设置标题(n, "$\huge %v份$")
设置标题(t, "$\huge 切割、拼接$")
m = 滑动条(0, 2, 1)
t == 1
设置标题(m, "$\huge 提示$")
text1 = "r"
m > 0
text2 = " πr"
m > 0
text3 = "S= πr^2"
m == 2
text4 = "\bgcolor{#FFC0CB}{\ 圆的面积\ }"
为了在未完成拼接时,都不显示提示滑动条——在滑动条t的更新时脚本写上:
如果(t<1,赋值(m,0))
注:赋值(SetValue)、设置标题(SetCaption)。
结语
至此,整个制作就完成了!
感兴趣的老师,可以试一试如何完成这种更对应课本的效果:
如需源文件,请转发本文,并写上:
很可以!圆面积公式推导
标签: #c语言求圆面积