Smileys aus Parabeln

Ich habe letztens einen Selbsteinschätzungsbogen für den Informatik-Unterricht erstellt und dafür habe ich Smileys gebraucht. Da ich bei so etwas immer sehr perfektionistisch bin, möchte ich, dass die Smileys gut aussehen und beliebig vergrößerbar sind, ohne dass es pixelig wird. So etwas wollte ich zum Beispiel nicht:

->

Also habe ich den Smiley per Funktionsgraphen erstellt. Ging ganz schnell, wenn man ein geeignetes Koordinatensystem drüberlegt und sich mit Parabeln und Kreisen auskennt:

Der äußere Umkreis hat den Mittelpunkt (0,0) und den Radius 1, daher gilt für einen Punkt (x,y) auf dem Kreis
x²+y²=1 oder y=+/- wurzel(1-x²), für x aus [-1, 1]

Das rechte Auge hat Mittelpunkt (0,25, 0,25) und Radius 0,05, daher haben wir
(x-0,25)²+(y-0,25)²=0,05² oder y=0,25 +/- wurzel(0,05² – (x-0,25)²) für x aus [-0,3; -0,2]

Das linke Auge hat Mittelpunkt (-0,25, 0,25) und Radius 0,05, daher haben wir
(x+0,25)²+(y-0,25)²=0,05² oder y=0,25 +/- wurzel(0,05² – (x+0,25)²) für x aus [0,2; 0,3]

Für die Parabel (den Mund) haben wir den Scheitelpunkt (0 | -0,7) und nehmen eine Normalparabel, d.h. y=x²-0,7 für x aus [-0,4, 0,4]

Nun können wir das Ganze in den FunctionDesigner eingeben und eine SVG-Grafik exportieren. Hier sieht man das Ergebnis: Smiley.svg. Man beachte, dass man beliebig rein- und rauszoomen kann. Der Code für den FunctionDesigner lautet

 
//Umkreis:
ausmalfarbe=gelb
f(x)=wurzel(1-x**2);-1;1
stetig
f(x)=-wurzel(1-x**2);1;-1

//Auge rechts:
ausmalfarbe=schwarz
f(x)=0,25+wurzel(0,05**2-(x-0,25)**2);0,2;0,3
stetig
f(x)=0,25-wurzel(0,05**2-(x-0,25)**2);0,3;0,2

//Auge links:
ausmalfarbe=schwarz
f(x)=0,25+wurzel(0,05**2-(x+0,25)**2);-0,2;-0,3
stetig
f(x)=0,25-wurzel(0,05**2-(x+0,25)**2);-0,3;-0,2

//Mund:
ausmalfarbe=keine
f(x)=x**2-0,7; -0,4; 0,4

Micro-Controller-Programmierung in der InfoAG

Nach tagelangem Ringen haben wir nun endlich das AVR StarterKit zum Laufen gebracht und zwar unter Ubuntu 11.10 Oneiric Oncelot.

Das AVR Starterkit besteht aus dem Olimex P-28-Board, dem Atmega8-MicroController, einem USBProg und diversen Kabeln.

Erstes Problem war, dass wir die Anschlüsse nicht richtig gelötet hatten. Glücklicherweise war der Support bei embedded projects super und nachdem ein Techniker daraufgeschaut hatte, lief das Set.

Das nächste Problem war die Software. Unter Windows XP wurde der Controller trotz Installation von WinAVR nicht richtig erkannt. Unter Ubuntu Linux war dies jedoch kein Problem. Um unter Ubuntu die Entwicklungsumgebung einzurichten tut man folgendes:

  1. Software-Pakete installieren: Im Terminal folgenden Befehl eingeben: sudo apt-get install gcc-avr avrdude avr-libc usbprog usbprog-gui libusbprog0 (das letzte Symbol ist eine Null!)
  2. Eclipse(für C++) installieren oder in bestehendes Eclipse das CDT-Plugin einbinden. Letzteres funktioniert so:
    1. eclipse öffnen: Help->Install new software
    2. Als URL http://download.eclipse.org/tools/cdt/releases/indigo eingeben
    3. Fortfahren und installieren
    4. Noch mal Help-> Install new Software
    5. Als URL http://avr-eclipse.sourceforge.net/updatesite eingeben
    6. Fortfahren und installieren
  3. Dann muss man in eclipse den AVRdude einstellen: Windows->Preferences und darin AVRdude. Genau wird dies hier beschrieben (AVR ISP mkII, Port usb, baud 8).

Nun sollte man in eclipse C programmieren können . Zu beachten ist, dass man den Quellcode per Run->Debug kompilieren sollte, denn andernfalls sind zumindest bei uns Fehler aufgetreten.

JavaAppdroid

Ich habe mich gestern etwas mit dem Android SDK auseinandergesetzt, mit dem man eigene Apps für Tablet-PCs und Smartphones schreiben kann. Wie es aussieht, besteht eine gute Chance JavaApp komplett für Android zu portieren, das heißt, JavaApp-Programme laufen dann auch auf Android!

Hier ein Link für eine erste Beispiel-App: HalloAndroid.apk (für Android 4.0), HalloAndroid2.3.apk (für Android 2.3.5), HalloAndroid2.2.apk (für Android 2.2).

JavaApp goes to the UK

After the trip to Bletchley Park last friday, a student asked me if I could show him how to write computer programs (I think he mainly thought about ‚computer games‘). Today he and his friend had a closer look with me at the JavaApp framework.

In two hours I gave them a brief introduction (and got them clubbered about the head with information) to programming. They decided to write a version of criss-cross (?, don’t know if it’s correct, it’s Tic Tac Toe in Germany) and this is the result of their doing:

class cross extends JavaApp
{
    int player=1;
    public static void main(String[] args)
    {
        new cross();
    }

    void whenProgramStarts()
    {
        drawLine(0, -320, -50, 320, -50);
        drawLine(0, -320, 50, 320, 50);
        drawLine(0, -50, 240, -50, -240);
        drawLine(0, 50, -240, 50, 240);
    }

    void whenKey1IsPressed()
    {
        if(player==1)
            drawCircle(0, -160, 120, 20);
        else
            drawStringCentered(0, "X", -160, 120);
        if(player==1)
            player=2;
        else
            player=1;
    }
}

Edit: Tommy told me that the game is called ‚Naughts and crosses‘

Erster Tag am Canterbury College

Seit Samstag befinde ich mich nun in England, genauer gesagt in Canterbury. Eben gerade fand die erste Stunde im College statt: Mathematik in pre-A-levels. Das Thema waren quadratische Gleichungen und verschiedene Moeglichkeiten, diese zu loesen.

Interessant ist vor allem, dass die Lehrer von den Schuelern mit ihrem Vornamen angesprochen werden. Eine schoene Sache, da es eine Kommunikation auf Augenhoehe ermoeglicht. Das Problem mit dem Siezen haben die Briten ja ohnehin nicht…

Eine Urne ist eine Urne ist eine Urne

Im heutigen Mathe-Förderunterricht ging es unter anderem um folgende Aufgabe:

„In einer Urne liegen eine schwarze, zwei rote und drei weiße Kugeln. Man zieht zweimal nacheinander ohne zurückzulegen. Geben Sie einen möglichst feinen Ereignisraum Omega an und bestimmen Sie die Mächtigkeit von Omega.“

Wie man sich vielleicht denken kann, halte ich diese Aufgabe für ziemlich beschränkt, weil überhaupt nicht klar ist, für welchen Zweck dieses Omega aufgestellt werden soll.

Naja, im Ma-Fö kamen wir zur folgenden Lösung:

Omega={sr,sw,rr,ww,wr} mit Mächtigkeit (Anzahl der Elemente)=5

Natürlich hatten wir das „nacheinander“ übersehen und deshalb müsste Omega etwas anders aussehen (wie genau? Da kommen Sie selbst drauf!).

Das Problem ist jedoch, dass dieses Omega kein Laplace-Raum ist, d.h., die Wahrscheinlichkeit für jedes dieser 5 Ereignisse ist nicht gleich groß! Klarerweise ist P[rr] kleiner als P[ww] (weil es weniger rote Kugeln gibt).

Wenn man also Wahrscheinlichkeiten berechnen möchte, muss man Omega größer machen: Wir nummerieren einfach alle Kugeln von a bis f durch:

a= schwarze Kugel, b, c=rote Kugeln, d, e, f: weiße Kugeln

Dann bekommen wir folgendes Omega:

Omega={ab, ac, ad, ae, af, bc, bd, be, bf, cd,…, ef}

Das sind insgesamt 6 über 2 = 15 Elemente und nun ist jedes Ereignis aus Omega gleich wahrscheinlich. Wir bekommen zum Beispiel:

  • P[rr] = P[bc] = 1/15, also ungefähr 6%
  • P[ww]=P[de, df, ef] = 3/15 = 1/5 = 20%

Das Blöde ist also, dass man nicht weiß, wofür dieses Omega benötigt wird. Wenn es nur darum geht, die möglichen Ausgänge des Experiments zu beschreiben, ist der erste Ansatz der einfachste und damit sinnvollste. Wenn man aber Wahrscheinlichkeiten berechnen möchte, benötigt man den zweiten Weg.

Vertretungsstunde beim iv6

In der letzten Woche haben die Schülerinnen und Schüler des iv6 in einer Vertretungsstunde ein kleines Computerspiel erarbeitet, eine Variante des Nim-Spiels mit 2 Spielern: In einer Reihe liegen 9 Streichhölzer. Wenn ein Spieler am Zug ist, muss er 1 bis 3 Streichhölzer nehmen. Der Spieler, der das letzte Streichholz nimmt, verliert.

Quellcode: Streichholzspiel.java

Programm: Streichholzspiel.jar

Erstes Treffen der AG „Mathe meets Info“

Am vergangenen Dienstag hat das erste Treffen der neuen AG „Mathe meets Info“ stattgefunden. Leider waren nur zwei Schüler anwesend.

Nachdem organisatorische Dinge geklärt waren, konnten die Schüler ihre Erwartungen an die AG formulieren. Hierbei kristallisierten sich verschiedene Themen heraus, die in Angriff genommen werden sollen.

Das erste Thema, mit dem wir uns beschäftigen wollen, ist das Schreiben eines eigenen kleinen Betriebssystems in Assembler.