Оригинальный автор(ы) | Илер Фернандес |
---|---|
Первоначальный выпуск | 31 декабря 1996 г ( 1996-12-31 ) |
Стабильный релиз | 24.06 / 11 июня 2024 г. ( 2024-06-11 ) |
Репозиторий |
|
Написано в | Cuis_Smalltalk, Малый разговор |
Операционная система | Linux , Mac OS X , Windows , Сахар |
Тип | Программное обеспечение для интерактивной геометрии |
Лицензия | GPL |
Веб-сайт | www.gnu.org/s/dr-geo |
GNU Dr. Geo — это интерактивное геометрическое программное обеспечение, которое позволяет пользователям проектировать и манипулировать интерактивными геометрическими эскизами, включая динамические модели физики . [1] Это бесплатное программное обеспечение (исходный код, переводы, значки и установщик выпущены под лицензией GNU GPL ), созданное Hilaire Fernandes, оно является частью проекта GNU . Оно работает на графической системе Morphic (что означает, что оно работает на Linux, Mac OS, Windows, Android). Dr. Geo изначально был разработан на C++ с использованием скриптов Scheme , [2] [3] затем в различных версиях Smalltalk с Squeak , Etoys_(programming_language) [4] для одного ноутбука на ребенка [5] Pharo , затем Cuis-Smalltalk.
Доктор Гео манипулирует различными типами объектов, такими как точки, линии, окружности, векторы, значения, геометрические преобразования, скрипты. [6]
В Dr. Geo есть несколько видов точек: свободная точка, которую можно перемещать с помощью мыши (но можно прикрепить к кривой), и точка, заданная ее координатами.
Точки также могут быть созданы как пересечение двух кривых или как середина сегмента .
Dr. Geo оснащен классическими линейными , лучевыми , сегментными и векторными функциями .
Другие криволинейные объекты включают окружности (определяемые двумя точками, центром и сегментом или радиусом), дуги (определяемые тремя точками или центром и углом), многоугольники (правильные или нет, определяемые конечными точками) и геометрические места .
Кроме параллельной и перпендикулярной прямой, проходящей через точку.
Доктор Гео может применить к точке или линии одно из следующих преобразований:
Dr. Geo поставляется с макроконструкцией: способом обучения Dr. Geo новым конструкциям. [7] Он позволяет добавлять новые объекты в Dr. Geo: новые преобразования, такие как инверсия круга , утомительные конструкции, включающие множество промежуточных объектов, или конструкции, включающие скрипт (также называемый макроскриптом).
Когда некоторые объекты, называемые final, зависят от других объектов, называемых initial , можно создать сложную конструкцию, выводящую final объекты из заданных пользователем initial объектов. Это макроконструкция , граф взаимозависимых объектов.
Доступ к пользовательскому программированию лежит в основе Dr. Geo: из программного обеспечения пользователь может напрямую читать, изучать, изменять и распространять измененную версию Dr. Geo. Кроме того, предлагается встроенный в эскиз скриптинг.
Исходный код Dr. Geo — Smalltalk . Это также язык, используемый для пользовательского программирования: для расширения Dr. Geo произвольными вычислительными операциями (скрипт Smalltalk) и для определения геометрического эскиза полностью с помощью инструкций программирования (скетч Smalltalk).
Dr. Geo поставляется с исходным кодом и инструментами разработчика. Поэтому его код можно редактировать и перекомпилировать из Dr. Geo во время его работы. [8] Этот дизайн, унаследованный от Smalltalk, позволяет легко тестировать новые идеи и новые проекты.
Скрипт — это объект первого класса, определенный по коду Dr. Geo. Он поставляется с нулевым, одним или несколькими аргументами из типов, выбранных при определении скрипта. Когда экземпляр скрипта подключается к холсту, пользователь сначала выбирает его аргументы на холсте щелчками мыши, затем позицию на холсте вывода скрипта. Скрипт обновляется при каждом вычислении холста. Скрипты могут использоваться каскадно, один из которых является аргументом другого. [9] Скрипты предназначены для использования двумя различными способами:
Из скрипта модель аргументов достигается с помощью сообщений #arg1, #arg2 и т. д. Представление аргументов достигается с помощью сообщений #costume1, #costume2 и т. д.
Вычисление скрипта выполняется в его методе #compute. Например, для вычисления квадрата числа, la méthode
compute "возвращает квадрат числа" ^ self arg1 valueItem squared
создает числовой объект, значение которого является квадратом его первого и уникального аргумента типа number object. Всякий раз, когда изменяется первое число, возвращаемое скриптом значение также изменяется.
Эскизы Dr. Geo Smalltalk — это эскизы, полностью определенные на языке Smalltalk. Речь идет не о построении эскиза с помощью графического интерфейса Dr. Geo, а об описании эскиза с помощью языка Smalltalk. Предоставляется программный интерфейс с простым и легким синтаксисом. [10]
Smalltalk сам по себе является языком высокого уровня, тщательно итеративно созданным в течение примерно 10 лет в исследовательском центре Пало-Альто . Когда набросок описывается кодом Smalltalk, используются все возможности языка: объектно-ориентированное программирование , переменная , коллекция , итератор , случайность , чтобы получить немного другой набросок при каждом выполнении.
Эскиз Smalltalk редактируется и тестируется с помощью редактора эскизов Smalltalk . Такой эскиз можно отлаживать и выполнять шаг за шагом. Его код сохраняется, как и любой исходный код, во внешнем текстовом файле в кодировке UTF-8 для поддержки родного языка.
Вот как рекурсивно запрограммировать треугольник Серпинского . Его красная внешняя вершина подвижна.
| треугольник c | c := DrGeoSketch новый . треугольник := [ : s1 : s2 : s3 : n | c сегмент: s1 до: s2 ; сегмент: s2 до: s3 ; сегмент: s3 до: s1 . n > 0 ifTrue: [ значение треугольника : s1 значение: ( c middleOf: s1 и: s2 ) скрыть значение: ( c middleOf: s1 и: s3 ) скрыть значение: n - 1 . значение треугольника : ( c middleOf: s1 и: s2 ) скрыть значение: s2 значение: ( c middleOf: s2 и: s3 ) скрыть значение: n - 1 . значение треугольника : ( c middleOf: s1 и: s3 ) скрыть значение: ( c middleOf: s2 и: s3 ) скрыть значение: s3 значение: n - 1 ]] . значение треугольника : 0 @ 3 значение: 4 @ -3 значение: -4 @ -3 значение: 3 .
( c point: 0 @ 3 ) показать
Спираль Фибоначчи, запрограммированная [11] с геометрическими преобразованиями (вращение, трансляция и гомотетия). Точки a и b полученного интерактивного эскиза подвижны.
| canvas shape alfa fibo abms | canvas := DrGeoSketch new . alfa := ( canvas freeValue: -90 degreesToRadians ) hide . shape := [ : c : o : f | | ep | 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: член Fn-1, f2: член Fn, o & c: начало и центр спирального рукава e: конец спирального рукава" f1 := f первый . f2 := f второй . f3 := f1 + f2 . e := значение формы : c значение: o значение: f3 . c2 := ( масштаб холста : c центр: e фактор: f3 / f2 ) скрыть . k > 0 ifTrue: [ значение fibo : { f2 . f3 } значение: e значение: c2 значение: k - 1 ]] . a := точка холста : 1 @ 0 . b := точка холста : -1 @ 0 . m := ( холст middleOf: a и: b ) скрыть . s := значение формы : m значение: a значение: 1 . значение формы : m значение: s значение: 1 . значение fibo : { 1 . 2 } значение: b значение: a значение: 10
Smalltalk sktech можно использовать для разработки интерактивного эскиза, иллюстрирующего метод численного анализа. Здесь алгоритм Ньютона-Рафсона в итерации из 5 шагов.
| эскиз f df xn ptA ptB | эскиз := DrGeoSketch new axesOn . xn := 2 . f := [ : x | x cos + x ] . "Производная числа" df := [ : x | ( значение f : x + 1e-8 ) - ( значение f : x ) * 1e8 ] . график эскиза : f от: -20 до: 20 . ptA := ( точка эскиза : xn @ 0 ) большой ; имя: 'Перетащи меня' . 5 раз Повторить: [ ptB := точка эскиза : [ : pt | pt точка x @ ( значение f : pt точка x )] родительский: ptA . ptB скрыть . ( сегмент эскиза : ptA до: ptB ) пунктирная стрелка вперед . ptA := точка эскиза : [ : pt | | x | x := pt точка x . x - ( ( значение f : x ) / ( значение df : x ) ) @ 0 ] родитель: ptB . ptA скрыть . ( сегмент эскиза : ptB до: ptA ) пунктирная стрелка вперед ] .
Smalltalk sketch может быть закодирован на родных языках, в настоящее время на французском и испанском. Можно добавить больше родных языков.
{{cite conference}}
: CS1 maint: несколько имен: список авторов ( ссылка ){{cite web}}
: CS1 maint: несколько имен: список авторов ( ссылка )