Hallo,
wir haben in der FH ein kleines Programm geschrieben, bei dem es im Grunde um den Schnitt zweier Strecken geht.
Dabei wird per Mausklick eine Art Autobahn gezeichnet, danach ein (primitiver) LKW (also ein Rechteck) auf die Fläche draufgesetzt. Nun soll entschieden werden, ob der LKW auf der Autbahn ist oder nicht.
Meine Herangehensweise: Ich nehme jede einzelne Strecke in ein Array auf und prüfe dann später den Schnitt mit dem LKW.
Mein Problem ist, dass ich den Algorithmus zum Schnitt der beiden Strecken noch nicht ganz kapiere.
Ich wollte mal fragen, ob jemand einen relativ einfachen Algorithmus kennt, oder mir bei meinem helfen kann ihn zu verstehen.
Das Programm ist eigentlich fertig, nur funktioniert es manchmal nicht.
Ich hänge den Quellcode mal an, wenn ihn jemand sehen will. Das Ding wurde mit dem Oracle JDeveloper geschrieben.
Gruß und Danke,
mad
Schnittalgorithmus:
Alles anzeigen
wir haben in der FH ein kleines Programm geschrieben, bei dem es im Grunde um den Schnitt zweier Strecken geht.
Dabei wird per Mausklick eine Art Autobahn gezeichnet, danach ein (primitiver) LKW (also ein Rechteck) auf die Fläche draufgesetzt. Nun soll entschieden werden, ob der LKW auf der Autbahn ist oder nicht.
Meine Herangehensweise: Ich nehme jede einzelne Strecke in ein Array auf und prüfe dann später den Schnitt mit dem LKW.
Mein Problem ist, dass ich den Algorithmus zum Schnitt der beiden Strecken noch nicht ganz kapiere.
Ich wollte mal fragen, ob jemand einen relativ einfachen Algorithmus kennt, oder mir bei meinem helfen kann ihn zu verstehen.
Das Programm ist eigentlich fertig, nur funktioniert es manchmal nicht.
Ich hänge den Quellcode mal an, wenn ihn jemand sehen will. Das Ding wurde mit dem Oracle JDeveloper geschrieben.
Gruß und Danke,
mad
Schnittalgorithmus:
Quellcode
- public int guzs(Punkt p2){
- // ergebnis = 0 -> Schnitt
- int dx1 = p0.getX()-p1.getX();
- int dx2 = p2.getX()-p0.getX();
- int dy1 = p1.getY()-p0.getY();
- int dy2 = p2.getY()-p0.getY();
- System.out.println(dx1+","+dx2+","+dy1+","+dy2);
- int ergebnis = 0;
- if(dx1*dy2 > dx2*dy1) ergebnis = 1;
- if(dx2*dy1 > dx1*dy2) ergebnis = -1;
- if(dy2*dx1 == dy1*dx2){
- if((dx1*dx2 < 0) || (dy1*dy2 < 0)){
- ergebnis = -1;
- } else if (dx1*dx1 + dy1*dy1 >= dx2*dx2 +dy2*dy2){
- ergebnis = 0;
- } else ergebnis = 1;
- }
- return ergebnis;
- }