Konrad-Adenauer-Gymnasium Langenfeld

Informatik Grundkurs Einführungsphase

Kirche zeichnen

Die Methode

private void KircheZeichnen(int xPos, int yPos)

zu implementieren, ist schon etwas komplexer.

Auch hier bietet sich eine Top-Down-Zerlegung in Teilprobleme an:

  1. Turm zeichnen
  2. Turmdach zeichnen
  3. Turmtür zeichnen
  4. Turmuhr zeichnen
  5. Schiff zeichnen
  6. Schiffdach zeichnen
  7. Schifffenster zeichnen

Für alle Berechnungen verwenden wir lokale Methodenvariablen. Außerdem werden über die beiden Parameter xPos und yPos die Position der oberen rechten Ecke des Kirchturms übergeben.

int iTurmbreite;
int iTurmhöhe;
int iTurmDachhöhe;
int iTurmMitte;
int iSchiffbreite;
int iSchiffhöhe;
int iSchiffdachhöhe;
int iSchiffdachlänge;
int iTürbreite;
int iTürhöhe;

iTurmbreite = 50;
iTurmhöhe = 7*(int)(iTurmbreite/3);
iTurmDachhöhe = 2*(int)(Turmbreite/5);
iTurmMitte = (int)(iTurmbreite/2);
iSchiffbreite = 5*(int)(iTurmbreite/2);
iSchiffhöhe = (int)(iTurmhöhe/2);
iSchiffdachhöhe = (int)(iSchiffhöhe/3);
iSchiffdachlänge = 4*(int)(iSchiffbreite/5);
iTürbreite = 8;
iTürhöhe = 4*iTürbreite;

Zeichnen des Turms

Der Turm wird als Rechteck beginnend an der Startposition xPos, yPos und mit den Maßen iTurmbreite und iTurmhöhe gezeichnet.

grGrafik.drawRect(xPos,yPos,iTurmbreite,iTurmhöhe);

Zeichnen des Turmdaches

Das Dach des Turms wird über zwei Linien gezeichnet. Die eine geht von der Startposition zu der x-Position in der Turmmitte und zu einer y-Position, die um die Dachhöhe iTurmDachhöhe vermindert wurde (Koordinatensystem!!!).

grGrafik.drawLine(xPos,yPos,xPos+iTurmMitte,yPos-iTurmDachhöhe);
grGrafik.drawLine(xPos+iTurmMitte,yPos-iTurmDachhöhe,xPos+iTurmbreite,yPos);

Zeichnen der Turmtür

Die Turmtür besteht aus zwei Rechtecken. Darauf ist dann ein Halbkreis angesetzt. Es ist etwas komplizierter die Koordinaten aus der Startposition zu berechnen.

Das erste Rechteck beginnt in der Turmmitte abzüglich der Türbreite als x-Koordinate und als y-Koordinare in der Turmhöhe (nach unten) abzüglich der Türhöhe (wieder nach oben). Sie wird mit den Maßen iTürbreite und iTürhöhe gezeichnet.

grGrafik.drawRect(xPos+iTurmMitte-iTürbreite,yPos+iTurmhöhe-iTürhöhe,iTürbreite,iTürhöhe);

Das zweite Rechteck beginnt in der Turmmitte als x-Position und in der gleichen y-Höhe wie das vorherige Rechteck und hat wieder die Maße iTürbreite und iTürhöhe.

grGrafik.drawRect(xPos+iTurmMitte,yPos+iTurmhöhe-iTürhöhe,iTürbreite,iTürhöhe);

Der Halbkreis beginnt an der gleichen x-Position wie das erste Rechteck. Die y-Position wird nochmals um eine Türbreite vermindert (Richtung nach oben!!!). Hinterher wird das umschreibende Rechteck eine doppelte Breite wie Höhe haben. Als Maße für den Rahmen wählen wir die doppelte Breite in x-Richtung und in y-Richtung. Die Startposition für den Winkel ist dann bei 180°, also bei 9 Uhr. Da wir mit dem Uhrzeigersinn zeichnen wollen, müssen wir als Bogen den Wert -180 nehmen (das positive Vorzeichen kennzeichnet die Winkelrichtung entgegen dem Uhrzeigersinn!).

grGrafik.drawArc(xPos+iTurmMitte-iTürbreite,yPos+iTurmhöhe-iTürhöhe-iTürbreite,2*iTürbreite,2*iTürbreite,180,-180);

Zeichnen der Turmuhr

Die Turmuhr besteht aus einem Kreis, in dem als Zeiger zwei Linien bei 12 Uhr und bei 3 Uhr liegen.

Der Kreis wird an der gleichen x-Position wie der Halbkreis über der Tür begonnen. Die y-Position der linken, oberen Ecke liegt 2 Türbreiten unterhalb der Turmoberkante. Als Maße für Breite und Höhe des Kreises wird wieder die doppelte Türbreite genommen.

grGrafik.drawOval(xPos+iTurmMitte-iTürbreite,yPos+2*iTürbreite,2*iTürbreite,2*iTürbreite);

Der Mittelpunkt des Kreises liegt dann in der Turmmitte (iTurmmitte) und 3 Türbreiten unterhalb der Turmoberkante. Dieser Punkt ist Ausgangspunkt für die "Zeigerlinien". Der Zielpunkt der ersten Linie hält die x-Position bei (damit bleibt er in der horizontalen Richtung). Seine y-Position liegt kurz vor der Kante des oberen Randes des Rechtecks, in dem der Kreis liegt.

grGrafik.drawLine(xPos+iTurmMitte,yPos+3*iTürbreite,xPos+iTurmMitte,yPos+2*iTürbreite+2);

Für den zweiten Zeiger bleibt die y-Position des Endpunktes der Linie unverändert und die x-Position wird um etwas weniger als eine Türbreite verändert.

grGrafik.drawLine(xPos+iTurmMitte,yPos+3*iTürbreite,xPos+iTurmMitte+iTürbreite-2,yPos+3*iTürbreite);

Zeichnen des Kirchenschiffs

Das Kirchenschiff besteht wieder aus einem Rechteck, das am rechten Rand des Turms (xPos+iTurmbreite) anfängt. In y-Richtung gehen wir zunächst mit der Turmhöhe auf den Boden des Gebäudes. Dann wird die Höhe des Schiffs abgezogen. Die Maße des Rechtecks ergeben sich aus der Schiffbreite und der Schiffhöhe.

grGrafik.drawRect(xPos+iTurmbreite,yPos+iTurmhöhe-iSchiffhöhe,iSchiffbreite,iSchiffhöhe);

Zeichnen des Kirchenschiffdaches

Das Kirchenschiffdach  beginnt wieder am rechten Rand des Turms in x-Richtung. Die y-Position ist dann noch um die Schiffdachhöhe geringer als beim Schiffgebäude. Von dort wird eine Linie in x-Richtung mit der Länge von 4/5 der Länge des Schiffgebäudes gezeichnet.

grGrafik.drawLine(xPos+iTurmbreite,yPos+iTurmhöhe-iSchiffhöhe-iSchiffdachhöhe,xPos+iTurmbreite+iSchiffdachlänge,yPos+iTurmhöhe-iSchiffhöhe-iSchiffdachhöhe);

Von dort wird dann noch eine Linie zur rechten, oberen Ecke des Schiffgebäudes gezeichnet.

grGrafik.drawLine(xPos+iTurmbreite+iSchiffdachlänge,yPos+iTurmhöhe-iSchiffhöhe-iSchiffdachhöhe,xPos+iTurmbreite+iSchiffbreite,yPos+iTurmhöhe-iSchiffhöhe);

Was jetzt noch fehlt sind die Kirchenfenster.


© Ralph-Erich Hildebrandt, 24. September 2006