Blatt 2, Aufgabe 2.3

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 2, Aufgabe 2.3
Wie soll man bei der Teilaufgabe c) dem Programm klar machen, dass eine Diagonale Linie gezogen werden soll? Horizontal und Vertikal ist ja kein Problem aber diagonal ist mir nicht verständlich.
bitte um Hilfe :open_mouth: :open_mouth:


xx*
x*x
*xx

xxx*
xxx
x
xx
*xxx

Weiß nicht, ob dir das weiterhilft, aber diagonal ist ja nichts Anderes als y++ & x++ (i.d.R)


Ja, das ist der Fall, falls man von einer Linie mit Steigung |1| ausgeht. Es sollen aber Linien mit anderen Steigungen auch möglich sein.
Zum Beispiel erhält man mit der Eingabe

char[][] feld = erzeugeNeueZeichenflaeche(10, 8);
feld = zeichneLinie(feld, 0, 0, 4, 5, 'X');
aufBildschirmAusgeben(feld);

die folgende Ausgabe:


…X…

…X…
…X…
.X…
X…

Die Punkte repräsentieren dabei die Leerzeichen.

Tipp: Geradengleichung.

Steigung
Die Steigung wir ja mit m=deltaY/deltaX berechnet.
Wiso kommt bei meinem Programm denn dann da eigentlich immer -2 raus statt -2.5 obwohl ich mit double Zahlen rechne? hat jemand ein Idee?


AdHoc-Antwort: Weil Du in Wirklichkeit die Gleichung -ln(-x)/x=-2 löst.

Codeschnipsel/Parameter könnten das Warten auf eine Antwort drastisch beschleunigen.

… und runden Sie so spät wie möglich
Später als vor zeichnePunkt(…) gings nicht. Mein Ergebnis weicht trotzdem leicht von der Lösung im Test ab.

Daher zunächst die Frage, genügt es mit double-Genauigkeit zu rechnen und ist mit runden auf-/abrunden oder ein einfaches (int)-Casting gemeint?


Probier doch mal beides aus und prüfe deine Ausgabe.


Ausgabe (Untere 3 y-Werte) mit Auf-/Abrunden:

Ausgabe (Untere 3 y-Werte) mit (int)-Abrunden aller x, y1 (, y2):

Musterbeispiel

:rolleyes: PS:…paar Stunden weg jetzt.


ich kann dieses Antwort nicht verstehen … wenn ich eine Linie in Wirklichkeit zeichnen möchte … dann muss ich Steigung brechen ( indem man DeltaX/deltaY ) und dann einfach jedes Durchgang die Steigung zum startY und startX addiere … bis ich ende bekomme … was ist damit falsch? … ich verstehe es nicht …

kann jemand mir einen Hinweiss geben … was in meine Methode falsch ist …

Danke im Voraus


So, gut jetzt hab ichs. Aber ist das jetzt genauer gerechnet/gezeichnet als vorher?

Wer schnell noch seinen Samstag Abend mit ASCII-Grafiken verschönern möchte, sollte

  1. in double rechnen und (eben so spät wie möglich) auf-/abrunden

  2. mit einer Schrittweite von 1. rechnen (eine höhere Genauigkeit durch kleinere Schritte ergibt eine abweichende Darstellung)

  3. den Kreis zweimal berechnen und zeichnen, nämlich x I-> y und y I-> x.

Dann klappts auch mit der Darstellung. N´Abend noch…


Die Antwort war auch nicht ganz ernst gemeint. Poste doch einfach naechstes Mal deinen Codeteil mit den Werten zB aus dem Debugger oder so, dann bekommst Du wahrscheinlich “auch schnell mal geholfen”.

Vermutlich rechnest Du versehentlich in (int), weil

double: 5. / 2. := 2.5
int: 5 / 2 := 2
int: -5 / 2 := -2

weil in (int) Nachkommastellen einfach abgeschnitten werden. Hilft das?


ich darf mein Code hier nicht in eingeben , sonst werde ich Plagiat bekommen . ( und um ehrlich zu sein , ich habe vergessen , wie ich mein Debugger benutze )


Im JUnit-Test ist doch die Ausgabe der Lösung mit angegeben.
Wie sieht denn deine Ausgabe bei testZeichneLinie__Diagonale__check() aus?


Hallo,
bei der zeichnePunkt Methode kommt bei mir ein AssertionError: expected:<42> but was:<32> raus.
In der Teilaufgabe soll man ja einen einzelnen Punkt in das Array einfügen, was ich auch gemacht habe, nur leider kommt der Fehler immernoch.
Ich habe auch, falls das notwendig war, eine Koordinate invertiert, da das Array-Feld und das geometrische Koordinatenfeld unterschiedlich sind.


Hast du das Array bzw. Zeichenfeld richtig initialisiert? Zeile und Spalte? Was sagt der Testcase darüber aus? Und hast du die richtige Koordinate umgerechnet? Prüfe das mal.


Also der erste Test mit der NeuenZeichenFläche funktioniert ohne Fehler bei mir, der Testcase für die ZeichnePunkt-Methode gibt mir halt den AssertionError. In der Teilaufgabe bekommt man ja eine zeichenfläche, die Koordinaten x und y und das Zeichen. Muss man da denn nicht einfach nur die Zeichenfläche bei den Koordinaten x und y (x und y als Arrayparameter) das Zeichen einfügen? ich hab da dann [-y][x].


[-y][x] dürfte für y!=0 ziemlich sicher außerhalb der Zeichenfläche liegen.


Oh ja stimmt :smiley:
okay, die x-Koordinate bleibt ja unverändert, nur die y-Koordinate wird irgendwie modifiziert. Ein kleiner Tipp wäre sehr hilfreich, denn ich stehe hier grade total auf dem Schlauch


Mal dir doch mal das ganze mit z.B. 8x5

Und dann trag mal in einer Tabelle die Java-Werte und Geometrischen-Werte ein. Finde das Pattern.