Hi!
Ich bins mal wieder
Hab diesmal folgendes Problem: Wir sollen ein Programm schreiben, dass ein Charakter Array erstellt, und dann mit der Funktion drawLine Linien zeichnen kann. Ich habe ein Problem mit der AsciiImage Klasse, da das im Drawline-Komplex aufgerufene AsciiImageObjekt anscheinend nicht von oben übernommen kann.. Alle anderen Probleme hab ich mal soweit ausgemerzt, auch wenn in der Formel zur Linienzeichnung sicher gröbere Logikfehler sind. Der Algorythmus ist der Bresenhams line algorythm:
Java
import java.util.Scanner;
class AsciiAplication
{
public static void main(String[] args)
{
Scanner arraydaten = new Scanner(System.in);
int breite = arraydaten.nextInt();
int hoehe = arraydaten.nextInt();
AsciiImage bildi = new AsciiImage(breite, hoehe);
int x0 = arraydaten.nextInt();
int y0 = arraydaten.nextInt();
int x1 = arraydaten.nextInt();
int y1 = arraydaten.nextInt();
String ch1 = arraydaten.next();
char[] ch2 = ch1.toCharArray();
char ch = ch2[0];
bildi.drawLine(x0, y0, x1, y1, ch);
bildi.toString();
while(arraydaten.hasNext())
{
x0 = arraydaten.nextInt();
y0 = arraydaten.nextInt();
x1 = arraydaten.nextInt();
y1 = arraydaten.nextInt();
ch1 = arraydaten.next();
ch2 = ch1.toCharArray();
ch = ch2[0];
bildi.drawLine(x0, y0, x1, y1, ch);
bildi.toString();
}
}
}
Alles anzeigen
Java
import java.lang.Math;
class AsciiImage
{
private int breite;
private int hoehe;
private int x0;
private int y0;
private int x1;
private int y1;
private char ch;
private int y;
private String toString;
AsciiImage(int breite, int hoehe)
{
this.breite = breite;
this.hoehe = hoehe;
char[][] AsciiImage = new char[hoehe][breite];
for(int i = 0; i<hoehe; i++)
{
for(int j = 0; j<breite; j++)
{
AsciiImage[i][j] = '-';
}
}
}
public void clear()
{
char[][] AsciiImage = new char[hoehe][breite];
for(int i = 0; i<hoehe; i++)
{
for(int j = 0; j<breite; j++)
{
AsciiImage[i][j] = '-';
}
}
}
public void drawLine(int x0, int y0, int x1, int y1, char ch)
{
this.x0 = x0;
this.y0 = y0;
this.x1 = x1;
this.y1 = y1;
this.ch = ch;
boolean steep = Math.abs(this.y1 - this.y0) > Math.abs(this.x1 - this.x0);
if(steep)
{
swap(this.x0, this.y0);
swap(this.x1, this.y1);
}
if(x0 > x1)
{
swap(this.x0, this.x1);
swap(this.y0, this. y1);
}
int deltax = this.x1 - this.x0;
int deltay = Math.abs(this.y1 - this.y0);
int error = -deltax / 2;
int ystep;
int y = this.y0;
this.y = y;
if(this.y0 < this.y1)
{
ystep = 1;
}
else
{
ystep = -1;
}
for( ; this.x0<=this.x1; this.x0++)
{
if(steep)
{
AsciiImage[this.y][this.x0] = this.ch;
}
else
{
AsciiImage[this.x0][this.y] = this.ch;
}
error = error + deltay;
if(error > 0)
{
y = y + ystep;
error = error - deltax;
}
}
}
private void swap(int a, int b)
{
int tausch = a;
a = b;
b = tausch;
}
public String toString()
{
for(int i=0; i<this.hoehe; i++)
{
for(int j=0; j<this.breite; j++)
{
this.toString = this.toString + AsciiImage[i][j];
}
this.toString = this.toString + "\n";
}
return this.toString;
}
}
Alles anzeigen
Bin für jede Hilfe dankbar,
L.G.: emptyvihttp://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm