tft每日頭條

 > 生活

 > 立方體展開問題

立方體展開問題

生活 更新时间:2024-11-29 08:55:23

對于小立方體組合的三視圖問題,之前介紹過兩種搞定小立方體組合的方法——

一是通過輸入的方式:

立方體展開問題(哪裡需要立方體就點哪裡)1

二是通過拖動的方式:

立方體展開問題(哪裡需要立方體就點哪裡)2

今天,來說說通過點擊的方式,也可以完成小立方體組合。

而且,該方式可用于這一類題目的演示——給出一個由若幹個小立方體疊成的幾何體的俯視圖,每個小方格中的數字表示該位置上重疊的小立方體的個數,要求畫出其三視圖。

來看看效果吧:

立方體展開問題(哪裡需要立方體就點哪裡)3

源文件獲取方式,請見文末

可以看到:點擊小格子,即可産生該位置上的小立方體;而且,點擊同一個小格子多少次,就在該位置上堆疊多少個小立方體。

另外,當點擊小格子生成相應的小立方體組合後,還可以隐藏沒有用到的小格子!

----------------二次編輯:新增一個功能----------------

  • 如果在中途,不小心點擊錯了小格子,導緻有多餘的小立方體,怎麼辦?
  • 為了解決這個問題,可以增多一個功能,達到:隻需鼠标輕松點一點,生成或删除小立方體,那都不是事!

立方體展開問題(哪裡需要立方體就點哪裡)4

修改後的作品效果

----------------二次編輯結束:作品修改請見鍊接----------------

效果不錯吧?有想到怎麼做嗎?

來看看制作思路:

  • 小格子這麼有規律——考慮用序列(Sequence)指令,以便一次性生成;
  • 并假設得到的是l1
  • 小格子可以一個一個地點擊——每個小格子必定是一個獨立的對象;
  • 于是,可用元素(Element)指令來得到l1中的元素。
  • 每點擊一次小格子,可産生一個小立方體——每個小格子必定都有單擊時腳本;
  • 小格子較多,若腳本需要一個一個輸入,太費時——考慮用表格區,因為當下拉填充時,還可複制其腳本。

下面開始動手操作!

立方體展開問題(哪裡需要立方體就點哪裡)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的單擊時腳本,再下拉填充,以保證得到的所有小格子都有腳本!

問題來了——小格子的單擊時腳本應輸入什麼?

  • 下拉填充使得其腳本都一樣,而我們還要保證最終可以構造出相應的小立方體。
  • 點多少次小格子,就要産生多少個小立方體,不妨引入新對象用來計數
  • 小格子的單擊時腳本隻需有計數功能——點擊小格子,數值就增加1。
  • 一共有25個小格子,而每個小格子都應單獨計數,則需要25個對象用來計數
  • 而這些對象再用于構造立方體的指令即可。

于是:

■ 構造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中,隻能進入對象的屬性,方可添加腳本。不過,在表格區,當下拉填充時,還可複制其腳本。所以,利用表格區,就可極大地節省輸入腳本的時間。

所以,利用表格區執行指令都可以批量操作。而表格區的下拉填充,還能填充對象的腳本等屬性。

如需本作品的源文件,請回複:哪裡需要立方體就點哪裡

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved