User:Chieeeeeen/Dr.Geo
原作者 | Hilaire Fernandes |
---|---|
首次发布 | 1996年12月31日 |
编程语言 | Cuis_Smalltalk, Smalltalk |
操作系统 | Linux, Mac OS X, Windows, Sugar |
类型 | Interactive geometry software |
许可协议 | GPL |
网站 | www |
GNU Dr. Geo 是一款互動式幾何軟體,允許使用者設計和操作互動式的幾何草圖,其中包含了物理的動態模型。 [1]它是一款自由軟體(原始程式碼、翻譯、圖示和安裝程式在 GNU GPL 許可下發佈),由 Hilaire Fernandes 創建,為 GNU 計劃的一部分。它在Morphic 圖形系統上執行 (這表示它可以在 Linux、Mac OS、Windows、Android 上執行)。Dr. Geo 最初是使用 C++ 程式語言搭配 Scheme 腳本開發的,[2] [3]之後又以不同版本的 Smalltalk 搭配 Squeak 、 Etoys_(程式語言) [4] (用於每童一機) [5] Pharo 以及 Cuis-Smalltalk 開發。
物件
[编辑]Dr. Geo 可以操作不同種類的物件,例如點、線、圓、向量、數值、幾何變換以及腳本。 [6]
點
[编辑]Dr. Geo 有不同種類的點:自由點,可以用滑鼠自由移動(但可能會附著到曲線上)以及由座標給定的點。
線
[编辑]其他曲線物件包括圓(由兩個點、中心和線段或半徑定義)、弧(由三個點或中心和角度定義)、多邊形(無論是否為正多邊形,均由端點定義)和軌跡。
變換
[编辑]除了通過點的平行線和垂直線以外,
Dr. Geo 可以對點或線進行以下其中任何變換:
- 鏡射
- 對稱
- 平移
- 旋轉
- 位似變換
巨集建構
[编辑]Dr. Geo 具備巨集建構的功能:這是一種教導 Dr. Geo 新構造的方法。 [7]它允許在 Dr. Geo 添加新物件,包括新的變換(例如圓的反演)、涉及許多中間物件的繁瑣建構,或是涉及腳本(也稱為巨集腳本)的建構。
當某些物件(稱為最終物件)依賴於其他物件(稱為初始物件)時,可以創建一個複雜的建構,從用戶提供的初始物件推導出最終物件。這就是巨集,它是一個相互依賴物件的圖形結構。
程式設計
[编辑]使用者程式設計的存取是 Dr. Geo 的核心功能:使用者可以直接從軟體中讀取、研究、修改及重新分發修改後的 Dr. Geo 版本。此外,還提供了嵌入於草圖中的腳本功能。
Dr. Geo 的原始碼是 Smalltalk 。這也是用於使用者程式設計的語言:用於擴展 Dr. Geo 的任意計算操作(Smalltalk 腳本),以及完全以程式指令定義幾何草圖(Smalltalk 草圖)。
Dr. Geo 附帶其原始碼和開發工具。因此,在 Dr. Geo 運行的同時,可以編輯和重新編譯其程式碼。 [8]這一設計源於 Smalltalk,使得測試新想法和新設計變得更容易。
Smalltalk 腳本
[编辑]腳本是一種頭等物件,定義於 Dr. Geo 的程式碼中。它可以有零個、一個或多個參數,這些參數類型在定義腳本時選擇。當腳本的實例插入���布時,使用者首先用滑鼠點擊選擇畫布中的參數,然後選擇腳本輸出的位置。腳本會在每次畫布計算時更新。腳本可以串聯使用,其中一個可以作為另一個的參數。腳本設計有兩種不同的用途:
- 輸出一個物件(例如數值),並在畫布中顯示其結果。這個結果可以在建立後續物件(幾何物件或腳本)時使用。
- 存取畫布中的物件:模型(MathItem)或其視圖(Costume),以進行任意用途和修改。例如,根據計算結果修改物件的顏色。
從腳本中,可以通過消息 #arg1、#arg2 等獲取參數模型,並且可以通過消息 #costume1、#costume2 等獲取參數視圖。
腳本的計算在其 #compute 方法中進行。例如,計算一個數字的平方的方法如下:
compute
"returns the square of a number"
^ self arg1 valueItem squared
創建一個數值物件,其值為第一個且唯一的數字物件參數的平方。每當第一個數字改變時,腳本返回的值也會隨之改變。
Smalltalk 草圖
[编辑]Dr. Geo 的 Smalltalk 草圖不是使用 Dr. Geo 的圖形介面來構建草圖,而是用 Smalltalk 語言來描述草圖,提供了一個簡單且輕量的程式設計介面。
Smalltalk 本身是一種高級語言,在 帕羅奧多研究中心經過約十年的精心迭代開發而成。當草圖用 Smalltalk 程式碼描述時,該語言的所有特性都會被使用:物件導向程式設計、變數、集合、迭代器、隨機性,以便在每次執行時獲得略微不同的草圖。
Smalltalk 草圖可以使用 Smalltalk 草圖編輯器進行編輯和測試。這類草圖可以逐步調試和執行。其程式碼像任何原始碼一樣被保存為外部文字檔中,並以 UTF-8 編碼,以支持當地語言。
謝爾賓斯基三角形
[编辑]以下是謝爾賓斯基三角形的遞迴程式設計方法。它的紅色外部頂點是移動的。
| triangle c |
c := DrGeoSketch new.
triangle := [:s1 :s2 :s3 :n |
c segment: s1 to: s2; segment: s2 to: s3; segment: s3 to: s1.
n > 0 ifTrue: [
triangle
value: s1
value: (c middleOf: s1 and: s2) hide
value: (c middleOf: s1 and: s3) hide
value: n-1.
triangle
value: (c middleOf: s1 and: s2) hide
value: s2
value: (c middleOf: s2 and: s3) hide
value: n-1.
triangle
value: (c middleOf: s1 and: s3) hide
value: (c middleOf: s2 and: s3) hide
value: s3
value: n-1]].
triangle value: 0@3 value: 4@ -3 value: -4@ -3 value: 3.
(c point: 0@3) show
斐波那契螺旋
[编辑]斐波那契螺旋[9]是透過幾何變換(如旋轉、平移和相似變換)設計而成的。 。生成的互動草圖中的點 a 和 b 是可移動的。
|canvas shape alfa fibo a b m s|
canvas := DrGeoSketch new.
alfa := (canvas freeValue: -90 degreesToRadians) hide.
shape := [:c :o :f| | e p |
e := (canvas rotate: o center: c angle: alfa) hide.
(canvas arcCenter: c from: o to: e) large.
p := canvas translate: e vector: (canvas vector: c to: o) hide.
(canvas polygon: { c. o. p hide. e }) name: f.
e].
fibo := [ ].
fibo := [ :f :o :c :k | | e f1 f2 f3 c2|
"f1: term Fn-1, f2: term Fn, o & c: origin and center of spiral arm
e: extremity of the spiral arm"
f1 := f first.
f2 := f second.
f3 := f1 + f2.
e := shape value: c value: o value: f3.
c2 := (canvas scale: c center: e factor: f3 / f2) hide.
k > 0 ifTrue: [ fibo value: {f2. f3} value: e value: c2 value: k - 1 ]].
a := canvas point: 1@0.
b := canvas point: -1 @0.
m := (canvas middleOf: a and: b) hide.
s := shape value: m value: a value: 1.
shape value: m value: s value: 1.
fibo value: {1. 2} value: b value: a value: 10
牛頓拉弗森法
[编辑]Smalltalk 草圖可以用來設計互動草圖,以說明數值分析方法。這裡展示的是牛頓拉弗森法的五步迭代過程。
| sketch f df xn ptA ptB|
sketch := DrGeoSketch new axesOn.
xn := 2.
f := [ :x | x cos + x ].
"Derivate number"
df := [ :x | (f value: x + 1e-8) - (f value: x) * 1e8].
sketch plot: f from: -20 to: 20.
ptA := (sketch point: xn@0) large; name: 'Drag me'.
5 timesRepeat: [
ptB := sketch
point: [ :pt | pt point x @ (f value: pt point x)]
parent: ptA.
ptB hide.
(sketch segment: ptA to: ptB) dotted forwardArrow .
ptA := sketch point: [:pt |
| x |
x := pt point x.
x - ( (f value: x) / (df value: x) ) @ 0 ] parent: ptB.
ptA hide.
(sketch segment: ptB to: ptA) dotted forwardArrow].
當地語言
[编辑]Smalltalk 草圖目前支援法語和西班牙語。未來可以支援更多語言。
參考資料
[编辑]- ^ C.K. Hung. Drawing the Parabolic Trajectory of an Object under Gravity (PDF). 2016 [14 January 2024].
- ^ A. Centomo. Dr. Geo e la Geometria Tolemaica. 2003 [13 January 2024] (意大利语).
- ^ A. Centomo, F. Campora. Geometria e programmazione con Dr. Geo. 2002 [14 January 2024] (意大利语).
- ^ V. Freudenberg, Y. Ohshima, S. Wallace. Etoys for One Laptop Per Child. C5.2009: 57–67. 2009.
- ^ G. Melo, A. Machado, A. Miranda. The Impact of a One Laptop per Child Program on Learning: Evidence from Uruguay (PDF). 2014 [14 January 2024].
- ^ C. Whittum. Get started with Dr. Geo for geometry. opensource.com. 2016 [14 January 2024].
- ^ J.R. Fernández García; C. Schnober. Interactive geometry with Dr. Geo MATH HELPER (PDF). Linux Magazine. June 2006 [14 January 2024]..
- ^ A. Busser. Dr. Geo, un docteur qui peut s'opérer tout seul [Dr. Geo, a doctor that can make a surgery by himself]. revue.sesamath.net. 2011 [13 January 2024] (法语).
- ^ H. Fernandes. Fibonacci spiral. March 2016 [6 January 2024].
[[Category:使用GPL许可证的软件]] [[Category:GNU计划软件]] [[Category:自由教育軟件]] [[Category:Linux教育軟件]]