74 lines
2.5 KiB
Text
74 lines
2.5 KiB
Text
[](https://classroom.github.com/a/k26mRzrA)
|
|
:sectnums:
|
|
:nofooter:
|
|
:toc: left
|
|
:icons: font
|
|
|
|
= Exercise Rep.03 -- Simple Drawing
|
|
|
|
In this exercise you are going to work with the `Turtle` to draw a few simple shapes.
|
|
|
|
Remember what a turtle can do:
|
|
|
|
* Teleport to a specific location
|
|
* Turn with a certain angle (left or right)
|
|
* Move a certain distance drawing a line
|
|
|
|
WARNING: We always want a _general_ solution which would also work with other input values. So try to _not_ assume (hard code) values except for those listed below, calculate the rest.
|
|
|
|
== Eulerian Path
|
|
|
|
An https://en.wikipedia.org/wiki/Eulerian_path[Eulerian path] is a finite graph which visits each edge exactly once.
|
|
|
|
Put simply: you are going to draw a shape 'in one go' (= no 'lifting' of the pencil until done) while not drawing one line more than once.
|
|
So you may visit nodes (points) multiple time, but _not_ the edges (lines).
|
|
|
|
In German there is a little saying which is often taught to kids which, actually, is an Eulerian path: 'Das ist das Haus des Nikolaus' -- one line being drawn for each syllable.
|
|
|
|
image::pics/nikolaus.png[width=600]
|
|
|
|
There are actually multiple possible paths which lead to a valid result.
|
|
|
|
Your task is to use the `Turtle` to properly draw this shape.
|
|
Use the following measurements and choose a good starting position:
|
|
|
|
* normal length = `60`
|
|
* short length = `42.2`
|
|
* long length = `84.9`
|
|
|
|
== Shapes
|
|
|
|
Your next task is to draw some shapes:
|
|
|
|
image::pics/shapes.png[Shapes to draw]
|
|
|
|
Make sure to select starting positions which do not let the shapes overlap.
|
|
|
|
=== Octagon
|
|
|
|
An https://en.wikipedia.org/wiki/Octagon[octagon] has, unsurprisingly, 8 corners.
|
|
Use a side length of `40`.
|
|
|
|
=== Rhombus
|
|
|
|
A https://en.wikipedia.org/wiki/Rhombus[rhombus] has two pairs of equal angles and four sides of the same length.
|
|
|
|
Use a side length of `60` and one of the angles has to be `82°`.
|
|
|
|
=== Triangle
|
|
|
|
The last shape actually consists of two triangles: one inner and one outer.
|
|
|
|
image::pics/triangles.png[]
|
|
|
|
* Both are isosceles triangles
|
|
* The inner one has the following measurements:
|
|
** short side = `6.0`
|
|
** long side = `8.0`
|
|
* Angles ares:
|
|
** `48.19°`
|
|
** `83.621°`
|
|
* The _sides_ of the outer one are _offset_ by `1.5`
|
|
* Could some code reuse be possible here 🤔
|
|
|
|
TIP: In case you are bad at Maths: https://en.wikipedia.org/wiki/Law_of_sines[Law of sines] & https://en.wikipedia.org/wiki/Kite_(geometry)[Deltoids] could be useful
|