2D-Grafik interstectsLine gibt immer false zurück

KingEldarion

Bekanntes Mitglied
Hi,

ich habe ein Problem undzwar habe ich einige Objekte in einem Vector und zwei "Knotenpunkte".
Zwischen diesen Knotenpunkten setze ich vier Line2D.Double.

Nun gehe ich mit einer forschleife jedes Objekt des Vectors durch und prüfe ob das Objekt eins der Linien überschneiden. Dies mache ich mit intersectsLine. intersectsLine gibt aber immer nur false zurück, also das sie sich nicht schneiden. Ich habe auch alle Objekte wirklich so gesetzt, dass es sich schneiden müsste!

Hier der Quellcode:

Java:
for(ListIterator<Node> firstNode = nodeVector.listIterator(); firstNode.hasNext();){
			
			Node startNode = firstNode.next();
			
			for(ListIterator<Node> secondNode = nodeVector.listIterator(); secondNode.hasNext();){
				boolean b = true;
				Node endNode = secondNode.next();
				
				linksoben = new Line2D.Double(startNode.getX(), startNode.getY(), endNode.getX(), endNode.getY());
				linksunten = new Line2D.Double(startNode.getX(), startNode.getMaxY(), endNode.getX(), endNode.getMaxY());
				rechtsoben = new Line2D.Double(startNode.getMaxX(), startNode.getY(), endNode.getMaxX(), endNode.getY());
				rechtsunten = new Line2D.Double(startNode.getMaxX(), startNode.getMaxY(), endNode.getMaxX(), endNode.getMaxY());
								
				for(ListIterator<Object> it = vector.listIterator(); it.hasNext();){
					
					Object o = it.next();
					if(o.intersectsLine(linksoben) || o.intersectsLine(linksunten) || o.intersectsLine(rechtsoben) || o.intersectsLine(rechtsunten)){
						b = false;
					}
				}
				startNode.setInArray(endNode.getID(), b);
			}
		}
 

Marco13

Top Contributor
Wenn du einem Fall generieren kannst, wo
Java:
System.out.println(line0.getPoint1()+" to "+line0.getPoint2());
System.out.println(line1.getPoint1()+" to "+line1.getPoint2());
System.out.println(line0.intersectsLine(line1));
etwas "inkonsitentes" ausgibt, sag' bescheid.
 
S

SlaterB

Gast
@bertor Object ist eine von mir erstellte Klasse, die von Rectangle2D.Double erbt
boah, größter Fehler den man in Java wohl machen kann,

benenne keine Klassen wie bekannte wichtige Java-Klassen und Object ist wichtiger als alle anderen zusammen,
die ganze 'Kraft' von Java an einem Punkt konzentriert, mache den nicht kaputt ;)
 
S

SlaterB

Gast
richte dich nach Marco13, bzw. ich kann dazu deine Nachfrage beantworten:
du hast bisher nur knappe Code-Ausschnitte, ganz ohne Daten gepostet,
dass es nicht funktioniert kann also naheliegend auch daran liegen, dass bei dir die Linien weit auseinander liegen

schaue dir in deinem Programm die genauen Werte an,
wenn du meinst dass du eine nachvollziebare Überschneidung gefunden hast, die doch nicht funktioniert,
kopiere sie in ein separates Programm:
Java:
public class Test {
    public static void main(String[] args)  {
        Line2D.Double line0 = new Line2D.Double(0,5,10,5);
        Line2D.Double line1 = new Line2D.Double(0,2,10,8);
        System.out.println(line0.getP1()+" to "+line0.getP2());
        System.out.println(line1.getP1()+" to "+line1.getP2());
        System.out.println(line0.intersectsLine(line1));
    }
}
alle Beispiele die jeder andere überlegen kann, dürften funktionieren,
für welches Beispiel willst du ein intersect?
 

bERt0r

Top Contributor
Um einen Fehler "hinzubekommen" muss man zuerst mal den Fehler erkennen und aus ihm lernen. Eine Klasse Object zu nennen ist schon mal ein riesen Fehler, der es quasi unmöglich macht dir anständig zu helfen. Nenn die Klasse um und poste ihren code.
 
S

SlaterB

Gast
nana, meckern ja, aber funktionieren kann es ja durchaus, sonst würde es sich ganz anders bemerkbar machen,
speziell für diesen Fehler muss es nicht weiter stören wenn sich nun alle kurz daran gewöhnt haben
 

KingEldarion

Bekanntes Mitglied
So ich habe jetzt im Endeffekt genau das gleiche gemacht:

Java:
import java.awt.geom.Rectangle2D;
import java.awt.geom.Line2D;

public class Bla{


	static Rectangle2D.Double quadrat = new Rectangle2D.Double(5, 5, 32, 32);
	static Line2D.Double line = new Line2D.Double(0, 0, 100, 100);
	
	public static void main(String[] args){

		System.out.println(quadrat.getX() + " " + quadrat.getY());
		System.out.println(line.getX1() + " " + line.getY1() + " to " + line.getX2() + " " + line.getY2());
		System.out.println(quadrat.intersectsLine(line));
	}
}

Diesmal kam aber true heraus.
 
S

SlaterB

Gast
> Diesmal kam aber true heraus.
womit auch du etwas mehr überzeugt bist, dass intersectsLine() seine Sache versteht,

in deinem Programm geht es nicht,
man kann natürlich vermuten, dass intersectsLine() genau dann aus irgendeinem Grunde versagt, vielleicht gar mit böser Absicht,
aber naja, im Lotto gewinnt man so selten wie man vom Blitz getroffen wird

viel eher ist es wohl doch eine andere Datenlage, die du nur falsch interpretierst,
um anderen einen kompletten Überblick zu geben, braucht es nach wie vor ein vollständiges Testprogramm, in welchem der Fehler auftritt,
kann ja auch dein Programm sein, musst du nur posten, möglichst kurz, um alle nicht benötigten GUI-Elemente/ Logik entfernt,
ohne Benutzereingaben, nur minimal wenige Objekte die sich schneiden sollen

oder du debuggst selber noch, was denn tatsächlich passiert,
dass du in deiner Klasse 'deren Namen hier nicht ausgesprochen werden soll' schon eine extra Methode hast ist gut,
dann kannst du dort genau loggen, welche Punkte mit welchen Ergebnis verglichen werden,
vielleicht werden dort nur falsche Objekte verglichen, die Methode oder diese Klasse kannst du im Voraus posten,
zusammen mit den System.out.println-Kommandos und einigen Logs ist vielleicht schon was zu erkennen,
ohne komplette 500 Zeilen-GUI

> Auch das ändern von Object in Actor ändert nichts daran das immer true rauskommt!

bleibe dennoch dabei, im Namen aller Bits und Bytes
 

Marco13

Top Contributor
Gib vor der Zeile
if(o.intersectsLine(linksoben) || o.intersectsLine(linksunten) || o.intersectsLine(rechtsoben) || o.intersectsLine(rechtsunten)){
mal alle Koordinaten der Endpunkte aus - dann wirst du sehen, dass die Methode richtig arbeitet, aber deine Eingabewerte falsch sind.
 
S

SlaterB

Gast
o ist hier ja ein eigenes Objekt, also darin loggen, wer weiß was dort vom Rectangle genommen wird
 

bERt0r

Top Contributor
nana, meckern ja, aber funktionieren kann es ja durchaus, sonst würde es sich ganz anders bemerkbar machen,
speziell für diesen Fehler muss es nicht weiter stören wenn sich nun alle kurz daran gewöhnt haben

Ich meckere nicht, ich weise ihn darauf hin dass wenn er unvollständige Beispiele postet mit Klassen die so heißen wie bekannte aus der API, er aber nix davon erwähnt dass er sie überschreibt, es für uns unmöglich ist seinen Fehler zu finden.
Woher soll ich wissen, ob er sich nicht auch eine eigene Line2D.Double Klasse gemacht hat und die für den Fehler verantwortlich ist?
 
S

SlaterB

Gast
er aber nix davon erwähnt dass er sie überschreibt, es für uns unmöglich ist seinen Fehler zu finden.
wie kannst du wissen dass er sie überschreibt, wenn du nichts davon gelesen hast ("nicht erwähnt"), es gar nicht weißt?
ein Paradoxon ;)

du kannst natürlich sagen dass durch dieses Vorgehen die bisherigen Antworten unbrauchbar waren,
aber nun müsste es doch voran gehen, also nicht "unmöglich zu helfen"

genug Offtopic von mir dazu ;)
 
Zuletzt bearbeitet von einem Moderator:

KingEldarion

Bekanntes Mitglied
So ich habs jetzt raus undzwar war das Problem das ich garkeine Höhe und Breite bestimmt bei meinen Rechtecken bestimmt.

Jetzt funktioniert das ganze
 
S

SlaterB

Gast
soviel also zum überzeugenden
> Ich habe auch alle Objekte wirklich so gesetzt, dass es sich schneiden müsste!
;)
 

KingEldarion

Bekanntes Mitglied
Dabei habe ich dummerweise nur auf die x und y Koordinaten geachtet da ich sie ja in meiner GUI gesetzt habe und dafür extra die Koordinaten auch ausgegeben habe, jetzt habe ich das ganze mal mit dem Spiel verglichen, weil dort ja die Überschneidungen mit der Linie funktioniert hat, dort fiel mir auf, dass ich in den Konstruktor noch die Werte für Höhe und Breite eingab, also habe ich nachgeschaut und gemerkt das ich sie in dem Mapeditor nicht setze.

Habs geändert und jetzt sehe ich das, dass das der Fehler war...

Trotzdem danke für die Hilfe!

MfG KingEldarion
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
_user_q Gibt es eine Möglichkeit, in Java alle möglichen Zeichen automatisch tippen zu lassen? AWT, Swing, JavaFX & SWT 13
U Gibt es eine Möglichkeit statt concatenate einen anderen Befehl zu nutzen? AWT, Swing, JavaFX & SWT 9
VPChief Gibt es eine möglichkeit Dateien aus der jar datei zu kopieren? AWT, Swing, JavaFX & SWT 46
J Gibt es einen Grund für 16x16 anstatt z.B. 15x15 Tiles ? AWT, Swing, JavaFX & SWT 10
S Caps-Lock Überprüfung gibt falschen Wert zurück AWT, Swing, JavaFX & SWT 1
B Swing Posistion von JButton auslesen gibt immer 0 aus AWT, Swing, JavaFX & SWT 1
M Jtable gibt -1 wert bei selectedRow und Column AWT, Swing, JavaFX & SWT 3
apple_pie1998 Programm gibt plötzlich exceptions aus. AWT, Swing, JavaFX & SWT 4
D AWT Graphics2D getClip gibt null zurück AWT, Swing, JavaFX & SWT 3
C JOptionPane.showConfirmDialog() -> Focus auf NEIN -> Enter gibt YES_OPTION zurück AWT, Swing, JavaFX & SWT 6
I JComboBox gibt bei ausgewählten ITem NullPointer an... AWT, Swing, JavaFX & SWT 3
Z Gibt es alternativen zu Swing und AWT, Swing, JavaFX & SWT 4
C Swing JComboBox, ItemListener gibt 2x aus AWT, Swing, JavaFX & SWT 2
M JTextField gibt beim auslesen null aus AWT, Swing, JavaFX & SWT 9
J Gibt es brauchbare GUI-Builder, oder doch besser alles per Hand machen? AWT, Swing, JavaFX & SWT 6
P gleichanfangende Zeilen solange auslesen bis es die gibt AWT, Swing, JavaFX & SWT 12
R Swing JLabel gibt stets 'null' aus AWT, Swing, JavaFX & SWT 3
D System.out.println() gibt html-Tags mit aus AWT, Swing, JavaFX & SWT 2
D Funktion JList.getSelectedValues() gibt nicht alle values zurück AWT, Swing, JavaFX & SWT 2
J Welche Fallstricke gibt es bei TreeTables in SWT/JFace AWT, Swing, JavaFX & SWT 3
G Gibt es diese Komponente? AWT, Swing, JavaFX & SWT 11
T Swing Gibt es eine Komponente für eine farbliche Editorbox? AWT, Swing, JavaFX & SWT 6
F JComboBox gibt falsche werte AWT, Swing, JavaFX & SWT 3
S JDialog gibt keine Nachrichten ueber sein Schliessen..? AWT, Swing, JavaFX & SWT 3
J Gibt es in Java ein mehrspaltiges Listenfeld? AWT, Swing, JavaFX & SWT 6
K Gibt es AWT- und Swing-ActionListener ? AWT, Swing, JavaFX & SWT 3
R Gibt es Pulldown-Buttons in Swing? AWT, Swing, JavaFX & SWT 5
J Gibt es ein OutlookTabbedPane für Java ? AWT, Swing, JavaFX & SWT 9
G Gibt's in Swing oder AWT sowas wie ein Gruppenfeld? AWT, Swing, JavaFX & SWT 3
K Textfelder auslesen gibt immer Fehler AWT, Swing, JavaFX & SWT 2
V Gibt es eine JButtonBar? AWT, Swing, JavaFX & SWT 3
S JList gibt nach Sortierung mit Collections keine Anzahl mehr AWT, Swing, JavaFX & SWT 3
S getSize gibt keine Größe wieder AWT, Swing, JavaFX & SWT 4
V Wie heisst dieses GUI-Element? Gibt es sowas für Swing? AWT, Swing, JavaFX & SWT 10
N JComponent#getClientProperty(key) welche Schlüssel gibt es? AWT, Swing, JavaFX & SWT 3
G Gibt es soetwas wie setPreferredWidth() für JTextPane? AWT, Swing, JavaFX & SWT 3
F gibt etwas wie frames in html auch in java? AWT, Swing, JavaFX & SWT 19
B Gibt einen JComboButton? AWT, Swing, JavaFX & SWT 3
P ProgressMonitor - isCanceled gibt immer false zurück AWT, Swing, JavaFX & SWT 2
I Grafikfilter => welche gibt es und wie einsetzen AWT, Swing, JavaFX & SWT 7
C getIcon für ein File das es nicht gibt? AWT, Swing, JavaFX & SWT 2
S Gibt es sowas wie SwingEvent? AWT, Swing, JavaFX & SWT 6
R drawLine gibt hässliche linie AWT, Swing, JavaFX & SWT 4
A KeyPressed gibt mir immer 0 AWT, Swing, JavaFX & SWT 8
J Gibt es eine Methode die mir die Javaversion zurück gib ? AWT, Swing, JavaFX & SWT 2
G Gibt es eine Klasse für Syntax highlighting? AWT, Swing, JavaFX & SWT 3
S Gibt es eine Möglichkeit???? AWT, Swing, JavaFX & SWT 2
Hatsi09 Javafx MediaPlayer spielt nicht immer AWT, Swing, JavaFX & SWT 3
T Swing Tooltip-Delay funktioniert nicht immer. AWT, Swing, JavaFX & SWT 1
J JOptionPane ruft sich selbst immer wieder neu auf AWT, Swing, JavaFX & SWT 3
L Swing JLabel wird beim ändern der Schriftart immer neu gezeichnet. AWT, Swing, JavaFX & SWT 2
M UI immer lesbar, egal welche Auflösung AWT, Swing, JavaFX & SWT 7
N SceneBuilder wie auf Attribute zugreifen? Diese sind immer null. AWT, Swing, JavaFX & SWT 6
K JTable getValueAt() klappt nicht immer AWT, Swing, JavaFX & SWT 1
K JavaFX Linie immer in der Mitte der Szene halten AWT, Swing, JavaFX & SWT 12
M Java FX Immer aktuelle Mausposition anzeigen AWT, Swing, JavaFX & SWT 6
Tom299 JavaFX Default-Cursor läßt sich nicht immer "aktivieren" AWT, Swing, JavaFX & SWT 3
Z JComponent's requestFocus() - Wieso nicht immer anwendbar? AWT, Swing, JavaFX & SWT 1
T SWT Mysql Tabelle zeigt immer nur den ersten Wert immer wieder an AWT, Swing, JavaFX & SWT 3
C JTextPane scrollt mit setText() immer nach oben AWT, Swing, JavaFX & SWT 2
B JFrame immer an gleicher stelle auf anderem Frame AWT, Swing, JavaFX & SWT 5
U Fenster beim Vergörßern immer quadratsich AWT, Swing, JavaFX & SWT 7
B Swing Form undecorated: Beim Bewegen geht die Maus immer automatisch zur linken Seite. AWT, Swing, JavaFX & SWT 7
V Buttons sehen immer "active" aus AWT, Swing, JavaFX & SWT 6
M SWT CCombo immer so groß wie der größte Wert! AWT, Swing, JavaFX & SWT 0
MaDDin-94 Swing Listener reagiert nicht immer AWT, Swing, JavaFX & SWT 2
M Key-,... Listener funktioniert nicht immer AWT, Swing, JavaFX & SWT 2
J Abbrechen muss immer einmal mehr gedrückt werden AWT, Swing, JavaFX & SWT 3
D Letzter Button füllt immer ganzes Fenster AWT, Swing, JavaFX & SWT 5
L View aus dem MVC ist immer die GUI? AWT, Swing, JavaFX & SWT 5
C JTable Datensätze bleiben immer gleich AWT, Swing, JavaFX & SWT 14
D JDialog: immer nur einer gleichzeitig AWT, Swing, JavaFX & SWT 4
M Fenster mit ProgressMonitor immer leer AWT, Swing, JavaFX & SWT 23
I Fenster immer im Vordergrund AWT, Swing, JavaFX & SWT 14
K Swing Warum bleibt das Image immer gleich AWT, Swing, JavaFX & SWT 4
D JTree node reagiert bei Klick nicht immer AWT, Swing, JavaFX & SWT 2
B JScrollPane scrollt nicht immer automatisch AWT, Swing, JavaFX & SWT 2
C SWT Combo getSelectionIndex() immer -1? AWT, Swing, JavaFX & SWT 10
S Canvas in ScrollPane wird beim scrollen immer neu gezeichnet AWT, Swing, JavaFX & SWT 3
W 2D-Grafik Koordinaten nicht immer die selben AWT, Swing, JavaFX & SWT 9
D Swing PopupMenu immer an gewünschte Position? AWT, Swing, JavaFX & SWT 2
A BufferedImage nach dem Speichern immer schwarz AWT, Swing, JavaFX & SWT 8
C TextArea Ausgabe immer ganz oben AWT, Swing, JavaFX & SWT 3
S Image wird nicht (immer) in paintComponent gezeichnet? AWT, Swing, JavaFX & SWT 6
O Immer Exception in AWT-EventQueue-0 AWT, Swing, JavaFX & SWT 5
F AWT MouseMotionListener e.getButton() ist immer 0 unter Linux und Windows AWT, Swing, JavaFX & SWT 6
N JTable, Zeile bleibt immer selektiert.... AWT, Swing, JavaFX & SWT 3
A Swing JFrame vergrößert sich immer bei setText() eines Labels AWT, Swing, JavaFX & SWT 3
G 2D-Grafik BufferedImage Hintergrund immer schwarz AWT, Swing, JavaFX & SWT 4
M WindowEvent löst immer PropertyChangeListener aus AWT, Swing, JavaFX & SWT 9
F Spalten in JTable immer am rechten Tabellenrand AWT, Swing, JavaFX & SWT 3
2 Werde Java GUIs immer noch mit dem in die Jahre gekommen Swing gemacht? AWT, Swing, JavaFX & SWT 12
S JFreeChart Achse immer sichtbar AWT, Swing, JavaFX & SWT 2
C AWT dispose() erzeugt nicht immer formfeed AWT, Swing, JavaFX & SWT 2
R Swing JDialog liefert immer false, 2 JListen verknüpfen AWT, Swing, JavaFX & SWT 3
B Swing: letztes Element wird immer auf Fenstergröße gezogen AWT, Swing, JavaFX & SWT 3
B Swing JTable getSelectedRow() liefert immer -1 AWT, Swing, JavaFX & SWT 6
A Größe eines JFrames immer nur quadratisch AWT, Swing, JavaFX & SWT 8
aze getX ,getY immer 0 AWT, Swing, JavaFX & SWT 9

Ähnliche Java Themen

Neue Themen


Oben