Hallo,
ich habe hier ein Programm, welches Punkt, Segment usw. initialisiert. Ein Segment besteht aus 2 Punkten und ein Punkt aus der x- und y-Koordinate. Nun ist es so, dass das Segment Punkt 1 und 2 dann 3 und 4 bekommt, es soll aber Punkt 1 und 2 dann Punkt 2 und 3 und Punkt 3 und 4 enthalten. Ich weiss nicht, wie ich dass realisieren könnte, ob das überhaupt mit dieser einen for-Schleife geht. Ich bin für jeden Tipp dankbar.
ich habe hier ein Programm, welches Punkt, Segment usw. initialisiert. Ein Segment besteht aus 2 Punkten und ein Punkt aus der x- und y-Koordinate. Nun ist es so, dass das Segment Punkt 1 und 2 dann 3 und 4 bekommt, es soll aber Punkt 1 und 2 dann Punkt 2 und 3 und Punkt 3 und 4 enthalten. Ich weiss nicht, wie ich dass realisieren könnte, ob das überhaupt mit dieser einen for-Schleife geht. Ich bin für jeden Tipp dankbar.
Java:
import java.io.IOException;
import java.io.FileReader;
import java.io.BufferedReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class Point {
static int anzrechteck = 0;
static Punkt punkt = null;
static Xfigpolyline pl = new Xfigpolyline();
static Bbox b1 = null;
static Segment segment = null;
static Segment segment2 = null;
public static int anz;
static int anzZeile = 0;
static Rechteck rechteck = null;
static Xfigpolyline pl1 = new Xfigpolyline();
static ArrayList<Rechteck> rechtecke = new ArrayList<Rechteck>();
static ArrayList<Segment> segmente = new ArrayList<Segment>();
public static void main(String[] args) throws IOException {
// lese Datei
BufferedReader in = new BufferedReader(...));
// lese Zeile
String zeile = in.readLine();
// solange Zeilen vorhanden sind
while (zeile != null) {
// überprüfe ob Polyline
if (zeile.startsWith("2")) {
zeile = in.readLine();
anzZeile++;
StringTokenizer st = new StringTokenizer(zeile);
anz = st.countTokens() / 2;
for (int i = 0; st.hasMoreTokens(); i++) {
// x- und y-Koordinate zuweisen
punkt = new Punkt(Integer.parseInt(st.nextToken()),
Integer.parseInt(st.nextToken()));
pl.punktDazu(punkt);
}
for (int i = 0; i < pl.polyline.size() - 1; i++) {
if (i < pl.polyline.size() - 1)
segment = new Segment(pl.polyline.get(i),
pl.polyline.get(i + 1));
if (segment.istSenkrecht()) {
// System.out.println("Segment ist senkrecht");
}
segmente.add(segment);
}
if ((segmente.size() == 4)
&& (segmente.get(0).p1.y == segmente.get(3).p2.y)
& (segmente.get(0).p1.x == segmente.get(3).p2.x)) {
anzrechteck++;
rechteck = new Rechteck(segmente.get(0), segmente.get(1),
segmente.get(2), segmente.get(3));
rechtecke.add(rechteck);
;
}
// Bbox
if ((segmente.size() == 3)
&& (segmente.get(0).p1.y == segmente.get(2).p2.y)
&& (segmente.get(0).p1.x == segmente.get(2).p2.x)) {
Punkt neup1 = new Punkt(segmente.get(0).p1.x,
segmente.get(0).p2.y);
Punkt neup2 = new Punkt(segmente.get(2).p1.x,
segmente.get(2).p2.y);
b1 = new Bbox(neup1, neup2);
b1.zuRechteck();
// System.out.println(b1.zuRechteck() + "Bbox");
rechtecke.add(b1.zuRechteck());
}
// kein Rechteck aber 5 Punkte
if ((segmente.size() == 4)
&& ((segmente.get(0).p1.x != segmente.get(3).p2.x) && (segmente
.get(0).p1.y != segmente.get(3).p2.y))) {
for (int j = 0; j < segmente.size(); j++) {
pl1.punktDazu(segmente.get(j).p1);
pl1.punktDazu(segmente.get(j).p2);
}
for (int i = 0; i < rechtecke.size(); i++) {
System.out
.println("Überschneidung mit Polyline der Länge 5: "
+ pl1.schneidetRechteck(rechtecke
.get(i)));
}
}
else if (segmente.size() != 4) {
for (int j = 0; j < segmente.size(); j++) {
for (int i = 0; i < rechtecke.size(); i++) {
if (segmente.get(j).schneidetRechteck(
rechtecke.get(i))) {
System.out.print(segmente.get(j));
System.out.print(" schneidet");
System.out.println(rechtecke.get(i));
}
}
}
} else {
System.out.println("Keine Überschneidung!");
}
pl.polyline.clear();
segmente.clear();
}
// Jede Zeile aus der XFig-Datei
zeile = in.readLine();
}
System.out.println();
}
}
Zuletzt bearbeitet: