msgbartop
Gruppe F1
msgbarbottom

12 Dec 08 Blatt 7 Aufgabe 3

Ein kleines “Gerüst” für die Aufgabe 3: aufgabe3.zip

Zusatzaufgabe:

d) Füge zuerst zu Lines eine Funktion hinzu

static void drawLine( double[][] image, double color,
                            double x1, double y1, double x2,
                            double y2, double width )

die eine Linie mit variabler Breite width zeichnet (linkes Teilbild unten) und dann eine Funktion

static void drawSmoothLine( double[][] image, double color,
                            double x1, double y1, double x2,
                            double y2, double width )

die analog zu drawLine eine weiche Line der Breite width einzeichnet. So wie die Linie auf dem rechten Teilbild:

Tags: , ,



Reader's Comments

  1. |

    Hi,

    also, ich bin grad richtig ein wenig verzweifelt. Für mich ist klar, dass ich nie, nie, nie im Leben (zumindest zum jetzigen Zeitpunkt) diese Aufgabe so hätte lösen können. Was ich als Ausgabe hinbekommen habe, bei der 3b) ist, eine gepunktete Linie, zwar mit der richtigen Steigung, aber je nach Nachkommastellen bei der Steigung war die Linie eventuell nur durch sehr wenige Punkte “angedeutet”.

    Na ja, gut, was kann man machen? Bei mir fängt es schon an, dass ich die ganzen Methoden der Math-Klasse nicht kenne .floor, .ceil und was da noch verwendet wird.

    Natürlich programmieren manche schon seit sie aus dem Kindergarten kommen, aber für mich ist das (mit dem was wir in der Vorlesung machen, was ja eigtl gar nichts mit der Aufgabenstellung zu tun hat) nicht lösbar.

    Es wäre vll hilfreich, wenn du, der Autor dieser Seite, mal deine Musterlsg umfassend kommentieren könntest. Das wär schon klasse. Mir erschließt sich nicht, wieso du diese “clamp”-Methode einführst, na ja, mir erschließt sich eh recht wenig dabei ;-). Also, eine Dokumentation wäre klasse, danke.

    So weit mein rumgeheule, aber ich find die Aufgaben echt krass, v.a. nachdem Blatt 6 noch weit niedrigeres Niveau hatte.

    LG – Mathis

  2. |

    Hallo Mathis,
    ich kann Dir dann die Muserlösung von der Übungsleitung empfehlen, die ohne den ganzen Kram auskommt, dafür aber mehr Fallunterscheidungen durchführt.

    Die Lösung, die ich hier online gestellt habe, ist eine für meine Zusatzaufgabe d) aus der Praktikumsstunde, bei der ich für die Aufgabe auch Lösungshinweise gegeben habe (statt den Punkten Kreise mit Radius width zeichnen, was drawPoint macht und die Lösung aus der b) weiterbenutzen, beim Anti-Aliasing dann additives Blending verwenden und Farbe in Abhängigkeit von der Entfernung zum Punkt-Mittelpunkt berechnen).

    Die drawLine-Funktion basiert auf einer Parameterisierung der Strecke, also auf der Einführung eines zusätzlichen Parameters (normalerweise t).
    In Vektorschreibweise für $$t\in \left [0,1 \right ]$$:
    $$\vec{g}(t) = \begin{pmatrix}
    x_1\\
    y_1
    \end{pmatrix}+ t \begin{pmatrix}
    x_2 – x_1\\
    y_2 – y_2
    \end{pmatrix}$$
    Die Funktion in der Lösung oben benutzt ein ganzzahliges “Intervall” im Bereich 0 bis größtes Delta (entweder entlang der x- oder y-Achse) und der zweite Vektor wird entsprechend durch die Intervallgröße dividiert. Dadurch, dass man das größtes Delta nimmt, wird auch sichergestellt, dass jeder Punkt getroffen wird.
    Das ist das Wichtigste an der Funktion.

    Die anderen Funktionen sind nur Hilfsfunktionen.

    Ich habe diese Lösung auch nur online gestellt, weil ich sie selber interessant finde, aber es erwartet niemand, dass man sowas schreibt oder auch schon alles verstehen muss, weil das schon recht Mathe-lastig ist und schon weniger mit reinem Programmieren zu tun hat.
    Grüße,
    Andreas



Leave a Comment

You must be logged in to post a comment.