Blatt 7 Gruppeaufgabe 7.1

Blatt 7 Gruppeaufgabe 7.1

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Blatt 7 Gruppeaufgabe 7.1
Frage : Methode ShiftPainter wie man es wirklich machen ??
ich weiße bis jetzt, dass ich die Verschiebung dx, dy mache, aber wie kann ich die Methode drawble Interface richtig zu nutzuen, dazugehörige Methode.


Ich verstehe leider deine Frage nicht.

Die Klasse ShfitPainter implementiert das Interface PixelPainter und nicht Drawable.

Mit dem übergebnen PixelPainter kannst du in deinem ShiftPainter arbeiten. Vielleicht hilft dir das weiter.


Ich habe auch so meine liebe Probleme mit dem Shifter. Heißt das nicht einfach nur, dass ich die x-Koordinate mit dx und die y-Koordinate mit dy addieren muss? Bei meiner Zeichnung funktionieren genau die beiden “shift”-Sachen nicht…

Und nebenbei bemerkt ist mir die Angabe bei 7.2 völlig unklar. Was muss ich bei den einzelnen Aufgaben mit der Matrix machen?

Vielen Dank im Voraus! :slight_smile:


@ QC:

Zur 7.1: Siehe Aufgabenstellung (“Allerdings um dx bzw. dy in der x bzw. y Koordinate verschoben.”).

Zur 7.2: Man soll im Konstruktor von allen Display-Unterklassen den Konstruktor der Oberklasse aufrufen, wofür man den HardwareMatrix-Parameter benötigt. Die Klasse HardwareMatrix hat dann eine Methode implementiert, die man später in den Methoden von Gray-, RGB- und RGBG-Display verwenden kann.


Im Wesentlichen ist die Addition richtig. Du solltest dir nur überlegen, wie du die Methoden getMinX, getMaxX, getMinY und getMaxY anpassen musst, so dass die Bedingungen, die bisher in der Aufgabe genutzt wurden erfüllt sind, obwohl das x und y in der set-Methode verschoben werden (der Vergleich von x, y mit diesen Methoden passiert ja außerhalb der draw-Methode und somit wird ein x und ein y verglichen, welche noch nicht verschoben sind und nach der Verschiebung könnten dein x und y dann ja trotzdem außerhalb des Bildschirms liegen). Am klarsten wird es, wenn du es dir mal aufzeichnest.

Die Matrix nutzt du, um die Pixelwerte für den Bildschirm zu setzen. Je nach Bildschirm ist die übergebene Hardware-Matrix bereits vollständig konfiguriert (entsprechend der Anzahl der Subpixel). Deine Aufgabe besteht nur noch darin die richtigen Intensitätswerte an den richtigen Stellen in der Hardware-Matrix zu setzen.


Muss ich dann nicht auch einfach um dx und dy verschieben, also die Zahlen drauf addieren?

Also muss ich zum Beispiel bei der a nur mit den angebenen Werten multiplizieren und eine „Formel benutzen“?

(Die Aufgaben machen mich fertig :D)


Wenn du es aktuell so hast und es nicht funktioniert, stimmt es vmtl. noch nicht ;).

Nimm dir einfach mal ein einfaches Beispiel mit festen Bildschirmgrößen, einem ursprünglichen x und y und dem einer bestimmten Verschiebung dx, dy (für ein einfaches Beispiel kann auch eines davon erst einmal 0 sein) und dann zeichne dir das mal auf (inklusive dem neuen minX, maxX etc.). Probiere ein bisschen herum, was passieren muss, wenn das x nach der Verschiebung nicht mehr im Bild wäre usw. Dann wird dir vielleicht klar, was genau du machen musst.

Im Wesentlichen schon.


  1. Sollen insgesamt 4 Klassen das Drawable Interface implementieren oder 4 Klassen welche wir erstellen?

  2. Müssen wir die Klasse SimpleLine verwenden?


Zu 1.: Ich habs so verstaden, das alle Klassen außer ShiftPainter Drawable implementieren.

Zu 2.:SimpleLine hab ich nicht verwendet, nur als Beispiel und Vorlage genutzt.

@CodeMonkey: Nach einigem Zeichnen bin ich dann auf die völlig irre (Ironie :smiley: ) Idee gekommen, einfach getMax, getMin, etc. gar nicht zu verschieben? Dann stimmt zumindest schon mal meine zweite Wolke, mit meinem Programm zum Kreis bin ich sowieso noch nicht zufrieden :smiley:



 012345
0      0
1  x   1
2      2
 012345

Nehmen wir mal an, du möchtest [m]x[/m] mit einem Shift-Painter zeichnen, der in x-Richtung um +10 verschiebt (und damit außerhalb des zu zeichnenden Bereichs). Bist du sicher, dass bei dir das richtige passieren wird? :wink:


Dann wäre ich ja auf dem Feld (1,12), das wär ja nicht mehr da. Ja mies. :smiley: Aber dx drauf addieren isses ja offenbar auch nicht… Oh man! :smiley: Ich peils nicht! :smiley:


Die Frage die wird uns also stellen sollten, um getMaxX() zu implementieren ist (anhand von CodeMonkeys Beispiel)
Welchen Wert darf ich für x höchstens einsetzen, wenn ich diesen anschließend um 10 (=dx) vergrößere und er dann noch kleiner gleich 5 (“altes” MaxX) sein soll?


Ach so ist das gemeint!
Wenn ich aber bei Max nun dx und dy abzieh bzw. bei Min und Max dx und dy dazu addiere, dann gibt er meine 2. Wolke nicht aus :frowning:


Du musst meine Frage nur für MinX richtig umformulieren…


Danke! ENDLICH hat es Klick gemacht und alles läuft! :smiley: :smiley:


ist das ein fehler dass die y-Werte bei dir von oben nach unten absteigend sind oder soll das in der aufgabe so sein?


Das soll so sein (s. Skizze beim path)).