Skip to content
Snippets Groups Projects
seminar04.ipynb 49.7 KiB
Newer Older
Miriam Brauer's avatar
Miriam Brauer committed
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import math\n",
    "import turtle\n",
    "\n",
    "# Arbeiten Sie diese Lösung durch und kommentieren Sie die einzelnen Schritte\n",
    "\n",
Miriam Brauer's avatar
Miriam Brauer committed
    "def stück (t,r, angle):\n",
    "    c=2*r*(math.sin(angle*math.pi/180))\n",
    "    t.rt(angle)\n",
    "    t.fd(r)\n",
    "    t.lt(90+angle)\n",
    "    t.fd(c)\n",
    "    t.lt(90+angle)\n",
    "    t.fd(r)\n",
    "    t.lt(180-angle)\n",
    "\n",
    "\n",
    "def kuchen (t, n, r):\n",
    "    angle=360/n\n",
    "    for i in range (n):\n",
    "        stück(t,r,angle/2)\n",
    "        t.lt(angle)\n",
    "    turtle.mainloop()\n",
    "    turtle.bye()\n",
    "    \n",
    "    \n",
    "bob=turtle.Turtle()  \n",
    "kuchen(bob, 5, 100)\n",
    "\n",
    "turtle.mainloop() \n",
    "turtle.bye()"
Miriam Brauer's avatar
Miriam Brauer committed
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Aufgabe 4\n",
    "\n",
    "\n",
Miriam Brauer's avatar
Miriam Brauer committed
    "Lesen Sie etwas zu Spiralen auf [Wikipedia](https://de.wikipedia.org/wiki/Spirale). Schreiben Sie dann ein Programm, welches eine [Archimedische Spirale](https://de.wikipedia.org/wiki/Archimedische_Spirale) (oder eine andere) zeichnet.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a data-flickr-embed=\"true\"  href=\"https://www.flickr.com/photos/jasoneppink/4964471335\" title=\"Spoiler Alert\"><img src=\"https://farm5.staticflickr.com/4110/4964471335_1f86a923f3_n.jpg\" width=\"320\" height=\"213\" alt=\"Spoiler Alert\"></a><script async src=\"//embedr.flickr.com/assets/client-code.js\" charset=\"utf-8\"></script>\n",
    "\n",
    "1. Sie müssen sich entscheiden, welche Argumente Sie in der Schnittstelle übergeben wollen und welche Sie der Funktion übergeben wollen. (Hier habe ich mich entschieden, Nutzern verschiedene funktionierende Schleifen zur Auswahl zu geben)\n",
    "2. In einem minimalistischen Schnittstellen Entwurf muss noch mindestens die Schildkröte an die Funktion übergeben werden.\n",
    "3. Die Formel für die Berechnung von Spiralen ist $r = a + b\\theta$ , a können Sie auf 0.1 und b auf 0.0002 als Ausgangswerte festlegen. \n",
    "4. Andere Parameterm die Sie entweder in der Schnittstelle oder in der Funktion festlegen müssen sind der Winkel theta, die Anzahl an Spiralensegmenten und die Länge der einzelnen Segmente. \n",
    "5. Analog zum Kreisbogen wird auch die Spirale durch kurze gerade Segmente und Drehungen gezeichnet. Da das Zeichnen von Segmenten n-mal wiederholt wird, benötigen Sie eine for-Schleife.\n",
    "6. In der Schleife muss für jedes Segment neu berechnet werden wie weit die Schildkröte sich drehen muss, da der Winkel nicht konstant bleibt. Dafür verwendet die Lösung: dtheta = 1 / (a + b * theta)\n",
    "7. Da diese Formel theta als den Winkel des vorherigen Abschnitts verwendet, muss theta ebenfalls in jedem Schleifendurchlauf überschrieben werden - also addieren Sie dtheta auf theta auf. \n",
    " \n",
Miriam Brauer's avatar
Miriam Brauer committed
    "Eine [Lösung](http://thinkpython2.com/code/spiral.py)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def spirale(t,n):\n",
    "    '''In dieser Spirale bestimmt der Nutzer, wie viele Segmente gezeichnet werden, die Windung der Spirale ist\n",
    "    in der Funktion festgelegt.\n",
    "    '''\n",
    "    length=3 \n",
    "    a=0.1\n",
    "    b=0.0002\n",
    "    theta=0.0\n",
    "    for i in range (n):\n",
    "        t.fd(length)\n",
    "        dtheta = 1 / (a + b * theta)\n",
    "        t.lt(dtheta)\n",
    "        theta = theta + dtheta\n",
    "\n",
    "import turtle\n",
    "bob=turtle.Turtle()        \n",
    "spirale(bob,1000)\n",
    "turtle.mainloop()\n",
    "turtle.bye()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "#### Aufgabe 5\n",
    "\n",
Miriam Brauer's avatar
Miriam Brauer committed
    "*(Hinweis: Dies ist eher eine Fleiß- und Zusatzaufgabe.)*\n",
    "\n",
    "Die Buchstaben des Alphabets sind aus ein paar grundlegenden Elementen zusammengesetzt wie z.B. vertikalen und horizontalen Linien und einigen Kurven. Entwerfen Sie ein Alphabet, welches mit einer kleinen Anzahl einfacher Elemente gezeichnet werden kann und schreiben Sie dann Funktionen zum Zeichnen der Buchstaben. \n",
    "\n",
    "Sie sollten eine Funktion für jeden Buchstaben schreiben, die Sie `draw_a`, `draw_b`, etc. nennen und diese Funktionen in eine Datei namens `letters.py` packen. Sie können [hier](http://thinkpython2.com/code/typewriter.py) eine \"Schildkrötenschreibmaschine\" herunterladen und damit ihren Code testen.\n",
    "\n",
    "\n",
    "Das könnte dann so aussehen:\n",
    "![Schreibmaschine](https://box.hu-berlin.de/f/fec51b18a8af4535b445/?dl=1)\n",
Miriam Brauer's avatar
Miriam Brauer committed
    "Sie finden eine Lösung für diese Aufgabe [hier](http://thinkpython2.com/code/letters.py); Diese benötigt auch [polygon.py](http://thinkpython2.com/code/polygon.py)."
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![Speichern](https://amor.cms.hu-berlin.de/~jaeschkr/teaching/spp/floppy.png) Speichern Sie dieses Notebook, so dass Ihre Änderungen nicht verlorengehen (nicht auf einem Pool-Rechner). Klicken Sie dazu oben links auf das Disketten-Icon und nutzen Sie beispielsweise einen USB-Stick, E-Mail, Google Drive, Dropbox oder Ihre [HU-Box](https://box.hu-berlin.de/).  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![Smiley](https://upload.wikimedia.org/wikipedia/commons/8/85/Smiley.svg)\n",
    "\n",
    "Herzlichen Glückwunsch! Sie haben das 4. Kapitel geschafft. Weiter geht es in [5: Bedingungen und Rekursion](seminar05.ipynb)."
   ]
  }
 ],
 "metadata": {
  "language_info": {
   "name": "python",
   "pygments_lexer": "ipython3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}