对于小立方体组合的三视图问题,之前介绍过两种搞定小立方体组合的方法——

一是通过输入的方式:

立方体展开问题(哪里需要立方体就点哪里)(1)

二是通过拖动的方式:

立方体展开问题(哪里需要立方体就点哪里)(2)

今天,来说说通过点击的方式,也可以完成小立方体组合。

而且,该方式可用于这一类题目的演示——给出一个由若干个小立方体叠成的几何体的俯视图,每个小方格中的数字表示该位置上重叠的小立方体的个数,要求画出其三视图。

来看看效果吧:

立方体展开问题(哪里需要立方体就点哪里)(3)

源文件获取方式,请见文末

可以看到:点击小格子,即可产生该位置上的小立方体;而且,点击同一个小格子多少次,就在该位置上堆叠多少个小立方体。

另外,当点击小格子生成相应的小立方体组合后,还可以隐藏没有用到的小格子!

----------------二次编辑:新增一个功能----------------

立方体展开问题(哪里需要立方体就点哪里)(4)

修改后的作品效果

----------------二次编辑结束:作品修改请见链接----------------

效果不错吧?有想到怎么做吗?

来看看制作思路:

下面开始动手操作!

立方体展开问题(哪里需要立方体就点哪里)(5)

一次性生成所有小格子

■ 只需一条指令,即:

l1 = 扁平列表(序列(序列(多边形((u, v), (u 1, v), 4), u, 0, 4), v, 0, 4))

思考过程如下:

· 小格子即为正方形,可用多边形(Polygon)指令:

多边形( <点1>, <点2>, <顶点数> )

· 小格子非常有规律,又是二维的,那么,可以用序列嵌套。

· 为了方便后续用元素( <列表>, <元素位置> ),于是,再运用扁平列表(Flatten)

立方体展开问题(哪里需要立方体就点哪里)(6)

■ 输完l1后,先激活3D绘图区,再输入:

中心定位((3,2,2))

注:中心定位(CenterView)

立方体展开问题(哪里需要立方体就点哪里)(7)

■ 最后,将l1隐藏。因为我们需要的是独立的小格子。

立方体展开问题(哪里需要立方体就点哪里)(8)

构造独立的小格子

■ 在表格区A1、A2处分别输入12,并下拉填充至A25。

■ 在B1处,输入=元素(l1, A1)

立方体展开问题(哪里需要立方体就点哪里)(9)

如果此时下拉B1填充,即可产生相应的独立的小格子。不过——我们需要先输入B1的单击时脚本,再下拉填充,以保证得到的所有小格子都有脚本!

问题来了——小格子的单击时脚本应输入什么?

于是:

■ 构造n1,n2,……,n25用来计数,并且初始值都为-1(这个初始值与后续构造立方体的指令有关):

执行(序列("n" k "=-1",k,1,25))

■ 在B1单击时脚本输入:

执行({"SetValue(n" Row(%0) ",n" Row(%0) " 1)"})

■ 下拉B1至B25填充。

具体操作如下:

立方体展开问题(哪里需要立方体就点哪里)(10)

这里稍作说明:

执行(Execute)在批量操作上可省时省力,其基本用法请见:「执行」是什么宝藏指令。

执行( <文本列表> )

对于不熟悉或者较长的执行指令,可先将列表书写完整,再改写为文本。

立方体展开问题(哪里需要立方体就点哪里)(11)

立方体展开问题(哪里需要立方体就点哪里)(12)

构造小立方体

有了用来计数的n1,n2,……,n25,以及小格子B1,B2,……,B25。那么,小立方体如何根据这些对象构造出来呢?

先来看这条指令:c1 = 序列(正六面体(平移(B1, 向量((0, 0, v)))), v, 0, n1),应如何理解?

正六面体( <正方形> )

当n1取值为-1,0,1时,c1如下图所示。

立方体展开问题(哪里需要立方体就点哪里)(13)

注:正六面体(Cube)、平移(Translate)、向量(Vector)

类似地,相应的c2,c3,……,c25也可以如此构造。

■ 于是,此批量操作可以用执行指令,即:

执行(序列("c" u "=Sequence(Cube(Translate(B" u ",Vector((0,0,v)))),v,0,n" u ")",u,1,25))

立方体展开问题(哪里需要立方体就点哪里)(14)

■ 并设置所有小立方体的线径、颜色。

立方体展开问题(哪里需要立方体就点哪里)(15)

令n1,n2等都为0,再设置c1,c2等的属性

立方体展开问题(哪里需要立方体就点哪里)(16)

显示小立方体数量

每个小格子上需显示此处的小立方体数量。以小格子B1为例,其小立方体数量是n1 1。于是,其文本为:

文本(n1 1,形心(B1) (-0.12, -0.21))

注:文本(Text)、形心(Centroid)

立方体展开问题(哪里需要立方体就点哪里)(17)

而其他24个文本也可以类似构造。

■ 于是,所有文本的构造如下:

执行(序列("Text(n" k " 1, Centroid(B" k ") (-0.12, -0.21))",k,1,25))

立方体展开问题(哪里需要立方体就点哪里)(18)

来看看效果:

立方体展开问题(哪里需要立方体就点哪里)(19)

■ 可以看到点击小格子时,容易不小心就点到了文本;于是,为了避免这种情况,将所有文本设置为不允许选定

立方体展开问题(哪里需要立方体就点哪里)(20)

创建复选框、按钮

■ 创建复选框a,标题为$\Large隐藏无关格子$

希望不勾选复选框时:所有小格子、文本都可以显示出来;当勾选复选框,而且小格子上的小立方体数量不等于0时,显示这些小格子、文本。

■ 于是,设置所有小格子、文本的显示条件。即:

执行(序列("SetConditionToShowObject(B" k ",!a ||(a &&n" k "!=-1))",k,1,25))

执行(序列("SetConditionToShowObject(text" k ",!a ||(a &&n" k "!=-1))",k,1,25))

立方体展开问题(哪里需要立方体就点哪里)(21)

■ 创建按钮:

立方体展开问题(哪里需要立方体就点哪里)(22)

注:设置视图方向(SetViewDirection)

要点回顾

立方体展开问题(哪里需要立方体就点哪里)(23)

后记

受赵林老师、刘玉平老师的启发,才有了本作品。

立方体展开问题(哪里需要立方体就点哪里)(24)

一开始,啊K只想到全部用执行指令。至于每个小格子的单击时脚本,本来是希望借助可以给对象添加脚本的指令,就可以再用执行来批量操作。

但是,GeoGebra中,只能进入对象的属性,方可添加脚本。不过,在表格区,当下拉填充时,还可复制其脚本。所以,利用表格区,就可极大地节省输入脚本的时间。

所以,利用表格区执行指令都可以批量操作。而表格区的下拉填充,还能填充对象的脚本等属性。

如需本作品的源文件,请回复:哪里需要立方体就点哪里

,