Hey Leute, ich probiere nun schon seit Tagen rum und finde meinen Fehler einfach nicht. Ich wäre echt erfreut wenn mir hier jmd weiterhelfen könnte.
Zuerst einmal zum allgemeinen Verständnis der Aufgabe :
In dieser Aufgabe sollen Sie eine „Methodenbibliothek“ für ASCII-Geometrie entwickeln. Erstellen Sie dazu die Klasse Zeichengeometrie und ergänzen Sie GENAU die folgenden öffentlichen statischen Methoden nach den Anweisungen in den jeweiligen Teilaufgaben .Beachten Sie dabei folgenden wichtigen Zusammenhang: Die von Methode zu Methode weiter gereichte Zeichenfläche ist ein char[][]-Feld, dessen „Ecke[0][0]“ gedanklich „oben/links“ ist,während alle Methoden das aus der Geometrie typische Koordinatensystem verwenden, bei dem der„Ursprung(0,0)“ tatsächlich „unten/links“ ist, wie es Abbildung 1 verdeutlicht. Beachten Sie auch, dass die zu zeichnenden Objekte über die Zeichenfläche hinausragen dürfen allerdings müssen nur die innerhalb der Zeichenfläche liegenden Teile davon auch tatsächlich gezeichnet werden.
In der ersten Aufgabe soll man eine Zeichenfläche erstellen. Das hat bei mir funktioniert. Aufgabe 2 besteht daraus, einen einzelnen Punkt zu markieren. Nun zur Aufgabe 3 :
linie(char[][] zf, int a, int b, int c, int d, char z) soll analog zu punkt eine ganze Linie zwischen (a, b) und (c, d) zeichnen, wobei die Endpunkte der Linie immer gezeichnet werden müssen (auch wenn sie gleich sind und die Linie damit zu einem Punkt degeneriert). Bedenken Sie, dass die Linie horizontal, vertikal (!) oder beliebig diagonal verlaufen kann sowie dass sie über den Zeichenrand hinausgehen darf. Es ist auch nicht definiert, wie Startpunkt(a, b)und Endpunkt(c, d) zueinander liegen! Zeichnen Sie so genau wie möglich(Multiplikationen vor Divisionen!). Hinweis: Verwenden Sie wann immer möglich die Geradengleichung: g(x) =b + (x−a)·d−b/c−a.
Nun mein Code dazu :
Ich darf außer Array.length keine anderen Methoden oder Klassen der Java API verwenden!!!
Ich komme einfach nicht weiter. Wo liegt mein Fehler, kann mir das jmd sagen?
Danke
Zuerst einmal zum allgemeinen Verständnis der Aufgabe :
In dieser Aufgabe sollen Sie eine „Methodenbibliothek“ für ASCII-Geometrie entwickeln. Erstellen Sie dazu die Klasse Zeichengeometrie und ergänzen Sie GENAU die folgenden öffentlichen statischen Methoden nach den Anweisungen in den jeweiligen Teilaufgaben .Beachten Sie dabei folgenden wichtigen Zusammenhang: Die von Methode zu Methode weiter gereichte Zeichenfläche ist ein char[][]-Feld, dessen „Ecke[0][0]“ gedanklich „oben/links“ ist,während alle Methoden das aus der Geometrie typische Koordinatensystem verwenden, bei dem der„Ursprung(0,0)“ tatsächlich „unten/links“ ist, wie es Abbildung 1 verdeutlicht. Beachten Sie auch, dass die zu zeichnenden Objekte über die Zeichenfläche hinausragen dürfen allerdings müssen nur die innerhalb der Zeichenfläche liegenden Teile davon auch tatsächlich gezeichnet werden.
In der ersten Aufgabe soll man eine Zeichenfläche erstellen. Das hat bei mir funktioniert. Aufgabe 2 besteht daraus, einen einzelnen Punkt zu markieren. Nun zur Aufgabe 3 :
linie(char[][] zf, int a, int b, int c, int d, char z) soll analog zu punkt eine ganze Linie zwischen (a, b) und (c, d) zeichnen, wobei die Endpunkte der Linie immer gezeichnet werden müssen (auch wenn sie gleich sind und die Linie damit zu einem Punkt degeneriert). Bedenken Sie, dass die Linie horizontal, vertikal (!) oder beliebig diagonal verlaufen kann sowie dass sie über den Zeichenrand hinausgehen darf. Es ist auch nicht definiert, wie Startpunkt(a, b)und Endpunkt(c, d) zueinander liegen! Zeichnen Sie so genau wie möglich(Multiplikationen vor Divisionen!). Hinweis: Verwenden Sie wann immer möglich die Geradengleichung: g(x) =b + (x−a)·d−b/c−a.
Nun mein Code dazu :
Java:
public static char[][] linie(char[][] zf, int a, int b, int c, int d, char z) {
int yW = 0;
if (c > a) {
for (int x = a; x <= c; x++) {
yW = b + (((x - a) * (d - b)) / (c - a));
if (zf.length - 1 - yW >= 0 && x < zf[zf.length - 1 - yW].length) {
zf[zf.length - 1 - yW][x] = z;
}
}
}
if (c < a) {
for (int x = c; x <= a; x++) {
yW = b + (((x - a) * (d - b)) / (c - a));
if (zf.length - 1 - yW >= 0 && x < zf[zf.length - 1 - yW].length) {
zf[zf.length - 1 - yW][x] = z;
}
}
}
if (c == a) {
if (b > d) {
for (int yW1 = d; yW1 <= b; yW1++) {
if (zf.length - 1 - yW1 >= 0 && a < zf[zf.length - 1 - yW1].length) {
zf[zf.length - 1 - yW1][a] = z;
}
}
}
if (b < d) {
for (int yW1 = b; yW1 <= d; yW1++) {
if (zf.length - 1 - yW1 >= 0 && a < zf[zf.length - 1 - yW1].length) {
zf[zf.length - 1 - yW1][a] = z;
}
}
}
if (b == d) {
if (a < c) {
for (int x = a; x <= c; x++) {
if (zf.length - 1 - b >= 0 && x < zf[zf.length - 1 - b].length) {
zf[zf.length - 1 - b][x] = z;
}
}
}
if (a > c) {
for (int x = c; x <= a; x++) {
if (zf.length - 1 - b >= 0 && x < zf[zf.length - 1 - b].length) {
zf[zf.length - 1 - b][x] = z;
}
}
}
}
}
if (a == c && b == d) {
if (zf.length - 1 - b >= 0 && a < zf[zf.length - 1 - yW].length) {
zf[zf.length - 1 - b][a] = z;
}
}
return zf;
}
Ich darf außer Array.length keine anderen Methoden oder Klassen der Java API verwenden!!!
Ich komme einfach nicht weiter. Wo liegt mein Fehler, kann mir das jmd sagen?
Danke