Simple turtle graphics: Difference between revisions
Content added Content deleted
(→{{header|Quackery}}: added demo code) |
(→{{header|Quackery}}: added image) |
||
Line 68: | Line 68: | ||
' [ [ 1 2 ] [ 1 3 ] [ 2 1 ] [ 13 10 ] [ 1 2 ] ] 200 1 barchart |
' [ [ 1 2 ] [ 1 3 ] [ 2 1 ] [ 13 10 ] [ 1 2 ] ] 200 1 barchart |
||
-10 1 fly</lang> |
-10 1 fly</lang> |
||
{{output}} |
|||
https://imgur.com/B7YbTbZ |
Revision as of 10:03, 31 July 2021
Simple turtle graphics is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.
The first turtle graphic discussed in Mindstorms: Children, Computers, and Powerful Ideas by Seymour Papert is a simple drawing of a house. It is a square with a triangle on top for the roof.
For a slightly more advanced audience, a more practical introduction to turtle graphics might be to draw a bar chart.
See image here: https://i.imgur.com/B7YbTbZ.png
- Task
-
- Create a function (or subroutine) that uses turtle graphics to draw a house of a specified size as described above. Optionally make it lovely by adding details such as, for example, doors and windows.
- Create a function (or subroutine) that takes a list (array, vector) of numbers and draws a bar chart from them, scaled to fit exactly in a square of a specified size. The enclosing square need not be drawn.
- Both functions should return the turtle to the location it was at and facing in the same direction as it was immediately before the function was executed.
Quackery
<lang Quackery> [ $ "turtleduck.qky" loadfile ] now!
[ behead do rot witheach [ do 2over 2over v< if 2swap 2drop ] ] is largest ( [ --> n/d )
[ 2 times [ 2dup walk -1 4 turn 2over walk -1 4 turn ] 2drop 2drop ] is rectangle ( n/d n/d --> )
[ 2dup rectangle ] is square ( n/d --> )
[ 3 times [ 2dup walk 1 3 turn ] 2drop ] is triangle ( n/d --> )
[ 1 2 turn 2dup square triangle 1 2 turn ] is house ( n/d --> )
[ stack ] is bar.width ( --> s )
[ stack ] is bar.scale ( --> s )
[ join temp put dup size n->v temp share do v/ 1/v join bar.width put dup largest temp share do v/ join bar.scale put witheach [ do bar.scale share do v/ bar.width share do rectangle bar.width share do fly ] temp take do -v fly bar.width release bar.scale release ] is barchart ( [ n/d --> )
turtle 150 1 house 10 1 fly ' [ [ 1 2 ] [ 1 3 ] [ 2 1 ] [ 13 10 ] [ 1 2 ] ] 200 1 barchart -10 1 fly</lang>
- Output: