URL: https://linuxfr.org/news/dr-geo-16-03 Title: Dr. Geo 16.03 Authors: Fernandes Hilaire Nils Ratusznik Date: 2016年03月25日T07:04:22+01:00 License: CC By-SA Tags: fractales, pharo, dr_geo, programmation, éducatif, éducation et mathématiques Score: 18 [Dr. Geo](https://en.wikipedia.org/wiki/DrGeo) est un environnement libre de géométrie interactive et de programmation. Il est aussi bien destiné à un public jeune de l'école primaire ou du secondaire I, qu'à des plus grands pour expérimenter la géométrie et/ou la programmation. Il est propulsé par l'environnement de développement dynamique [Pharo](https://en.wikipedia.org/wiki/Pharo), supporté par l'[INRIA/RMOD](https://www.inria.fr/equipes/rmod).  ---- [Dr. Geo](http://drgeo.eu) [Modifications](http://www.drgeo.eu/changelog#TOC-16.03c) [Spirale de Fibonacci](http://blog.drgeo.eu/post/2016/La-spirale-de-Fibonacci) [Aide et documentation](http://drgeo.eu/help) ---- Cette version apporte quelques fonctions supplémentaires mais surtout plusieurs correctifs dans l'utilisation des figures programmées. Dr. Geo est donc plus sûr dans la conception de figures interactives codées. Lorsque conçues de façon itératives, ces figures comptent plusieurs milliers d'objets. Quelques exemples de figures programmées ---------------------------------------------------------- Les échantillons sont présentés avec le code source et son résultat après exécution du code. Les constructions sont toutes récursives et les figures obtenues sont **déformables interactivement**. ### Fractale de Koch | canvas koch | canvas := DrGeoCanvas new fullscreen. koch := [ ]. koch := [ :a :b :k | |ab c d v | k> 0 ifTrue: [ ab := (canvas segment: a to: b) hide. c := (canvas pointOnCurve: ab at: 1 / 3) hide. d := (canvas pointOnCurve: ab at: 2 / 3) hide. v := (canvas altIntersectionOf: (canvas perpendicularBisector: ab) hide and: (canvas circleCenter: c to: d) hide) hide. koch value: a value: c value: k - 1. koch value: c value: v value: k - 1. koch value: v value: d value: k - 1. koch value: d value: b value: k - 1]. canvas segment: a to: b]. koch value: ((canvas point: -8@3) name: 'A') value: ((canvas point: 8@3) name: 'B') value: 5  ### Spirale de Fibonacci |canvas shape alfa fibo a b m s| canvas := DrGeoCanvas new fullscreen. 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| "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: f2. c := (canvas scale: c center: e factor: f3 / f2) hide. k> 0 ifTrue: [ fibo value: {f2. f3} value: e value: c 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  ### Sierpinski dragon | canvas dragon rec| canvas := DrGeoCanvas new fullscreen. dragon := [ ]. dragon := [ :a :b :k | | c m n | k> 0 ifTrue: [ c := canvas altIntersectionOf: (canvas circleCenter: a to: b) hide and: (canvas circleCenter: b to: a) hide. c hide. m := (canvas middleOf: a and: c) hide. n := (canvas middleOf: b and: c) hide. dragon value: m value: a value: k - 1. dragon value: m value: n value: k - 1. dragon value: b value: n value: k - 1]. k = 0 ifTrue: [ canvas segment: a to: b ]. ]. rec := 5. canvas text: 'Sierpinski Dragon, recursion: ', rec printString at: 0@0. dragon value: (canvas point: -4@1.5) value: (canvas point: 4@1.5) value: rec  ### Branches | canvas branch alfa beta gamma delta| canvas := DrGeoCanvas new fullscreen. alfa := (canvas freeValue: 135 degreesToRadians) hide. beta := (canvas freeValue: 202.5 degreesToRadians) hide. gamma := (canvas freeValue: 68.5 degreesToRadians ) hide. delta := (canvas freeValue: 157.5 degreesToRadians ) hide. branch := [ ]. branch := [ :a :b :k | | m am mb c d e bc cd de f g h bf fg gh | m := (canvas middleOf: a and: b) hide. am := canvas segment: a to: m. mb := canvas segment: m to: b. "" c := (canvas rotate: m center: b angle: alfa) hide. d := (canvas rotate: b center: c angle: beta) hide. e := (canvas rotate: c center: d angle: beta) hide. bc := canvas segment: b to: c. cd := canvas segment: c to: d. de := canvas segment: d to: e. "" f := (canvas rotate: c center: b angle: gamma) hide. g := (canvas rotate: b center: f angle: delta) hide. h := (canvas rotate: f center: g angle: delta) hide. bf := canvas segment: b to: f. fg := canvas segment: f to: g. gh := canvas segment: g to: h. k> 0 ifTrue: [ branch value: a value: m value: k - 1. branch value: m value: b value: k - 1. branch value: b value: c value: k - 1. branch value: c value: d value: k - 1. branch value: d value: e value: k - 1. branch value: b value: f value: k - 1. branch value: f value: g value: k - 1. branch value: g value: h value: k - 1. ] ]. branch value: (canvas point: 0 @ -2) value: (canvas point: 0 @ 1) value: 3 