前言:
此刻朋友们对“c语言坐标系涂色”都比较看重,大家都想要学习一些“c语言坐标系涂色”的相关内容。那么小编也在网上搜集了一些对于“c语言坐标系涂色””的相关文章,希望兄弟们能喜欢,各位老铁们一起来学习一下吧!转盘、掷骰子、抛硬币在小学、初中、高中的数学教材中,都多次出现。前两者,我们已用GeoGebra进行了模拟。而抛硬币自然也可以用GeoGebra来模拟!
来看下效果:
点击“抛硬币”按钮,即可模拟抛硬币一次,并显示和统计抛掷的结果,还可以标注出对应的点。
而点击“自动抛50次”按钮,即模拟抛掷50次硬币。
如果想要显示得好看些,也可以在模拟完数次硬币的抛掷后,点击“复位”按钮,再点击“自动抛50次”按钮:
还可以继续点击“自动抛50次”按钮,观察频率的变化情况:
那么,这个作品是如何制作的呢?
先来看制作思路:
如何模拟出硬币?硬币面——可用圆周(Circle)指令;硬币的正面“1”——竖直部分可用多边形(Ploygon)指令,弯曲部分可用圆弧(CircularArc)指令。硬币的反面“花”——若用玫瑰线来表示,知其参数方程,即可用曲线(Curve)指令。如何模拟抛硬币的效果?所谓“抛”,可拆解为两部分:翻转效果——旋转(Rotate)指令;向上或向下移动的效果——平移(Translate)指令。如何显示抛硬币的结果?假设未旋转前,正面向上。抛硬币的结果,取决于硬币旋转的度数。若旋转度数为360°的倍数——如果(If)、余式(Mod)指令。如何统计抛硬币的结果?将所有结果放于一列表中,再用条件计数(CountIf)指令。显示则用表格文本(TableText)指令。
那么,下面就开始具体的制作!
模拟硬币
用玫瑰线来表示硬币面上的“花”,其参数方程如下:
x=a* sin(nt)* cos(t), y=a*sin(nt)* sin(t)
再套进曲线指令:
曲线( <x(t)>, <y(t)>, <参变量t>, <t-起始值>, <t-终止值> )
于是,硬币基本可以模拟出来:
注:扁平列表(Flatten)、描点(Point)。
效果如下:
这里,对q2稍作解释:
q2是对“1”的弯曲部分的涂色,即多边形法涂色。而多边形q2的各顶点为:在圆弧A1B1上依次选取的101个点、在圆弧B2A2上依次选取的101个点。模拟抛硬币
sgn是符号函数。当x为正时,sgn(x)为1;当x为负时,sgn(x)为-1;当x为零时,sgn(x)为0。
先来看需要引进什么量。以抛硬币面c为例:
平移(旋转(c, sgn(b) 720° k' + b k, y轴), u)
也就是将“抛”这个动作拆解为多个部分:
硬币随机旋转半圈或一圈——度数b;且需要旋转的过程——引进滑动条k。硬币需有旋转多圈的效果——加多2圈(即±720°,正负取决于b的正负,以便同逆时针或顺时针方向旋转);要有旋转速度加快的效果——引进滑动条k'。硬币向上、再向下平移——引进向量u。
而引进这些量,考虑到具体的效果呈现,还需考虑这些量的设置:
注:随机元素(RandomElement)、去除(Remove)、序列(Sequence)、滑动条(Slider)、向量(Vector)、y 轴(yAxis)、更新作图(UpdateConstruction)、 赋值(SetValue)、 启动动画(StartAnimation)。
目前效果如下:
在此基础上,如何做到自动抛掷50次——引进滑动条m,让m运动1次,就抛掷1次!
而为了知晓一共抛掷几次——引进n来记录:
注:运行单击脚本(RunClickScript)。
效果如下:
按钮boutton1请自行隐藏。
显示结果
因为未抛掷完,我们就知道抛掷结果text0。而抛掷完(即h等于10时),抛掷次数才加一。
于是,在h的更新时脚本写上:
如果(h==10,赋值(l2,追加(l2,text0)))
注:追加(Append)。
于是,显示结果:
注:公式文本(FormulaText)。
统计结果
如果不考虑美观,可直接用条件计数计算列表l2中“正面”出现的次数。
而为了视觉效果更佳,所需步骤则略多:
注:商式(Div)、执行(Execute)、提取(Take)。
上面这么多步,使得当抛掷次数n超过50的倍数时,会自动产生多一列:
最多到500次,即显示10列。如需显示更多列,只需修改两个执行指令中的“10”。
最后,再做出坐标系,并标示出相应的点:
注:线段(Segment)、文本(Text)。
由于需要建立的坐标系比例与现有的1:1不同,需留意对应关系。这里,主要是让横轴1对应50,而纵轴的4对应1:
结语
如果难以理解一些指令或设置,可以稍作修改,再看与原先的效果有什么区别。
如需源文件,请点赞,并回复:抛硬币。