Seite 1 von 1

Kollisionen

Verfasst: 27. November 2008 16:47
von reuabreliz
Also ich habe ein Zeichenfenster das von QWidget abgeleitet ist. Ich habe eine Liste von einer Klasse Linie (QList<Linie>). Die Klasse Linie hat ein Element QPainterpath. Im paintEvent gehe ich alle Linien durch und zeichne sie mit QPainter ins Zeichenfenster.

Wie mache ich nun wenn ich wissen will wo sich 2 Linien berühren (falls sie es tun). Ich hätte mir gedacht ich Speichere alle Punkte in ein Array, aber meine Linien haben eine gewisse Breite. (Deshalb kann ich mir nicht nur den Punkt speichern oda) Was ist hier der beste und einfachste Lösungsweg?

Verfasst: 28. November 2008 07:36
von CaptnChaos
für dem QPainterPath kannst du die funktionen

Code: Alles auswählen

bool contains ( const QPointF & point ) const
bool contains ( const QRectF & rectangle ) const
direkt
benutzen.
Für die linien würde ich mir jeweils (wie in einem anderen thread bereits vorgeschlagen) temporär ein QRect erzeugen und dort ebenfalls die contains() funktion nutzen.

Verfasst: 28. November 2008 14:43
von reuabreliz
Gibt es eine Funktion die von QLine alle Punkte zurückgibt. Weil QPainterpath kann ja nur Rechtecke und Punkte schaun ob sie vorhanden sind.

Verfasst: 28. November 2008 19:48
von upsala
Wo sich 2 Geraden schneiden ist einfache Geometrie. Schau doch mal in deinen Schulunterlagen nach.

Wo sich zwei QLineF schneiden, ist eine einfache Funktion => Doku

Und Hr. Bresenham hilft dir sicherlich um alle Punkte einer Linie zu ermitteln,

Verfasst: 28. November 2008 21:12
von reuabreliz
Ja und wie bekomme ich die 2 Linien. Ich habe Mal in der Docu gekuckt von QPainterPath und da steht eine funktion elementAt(int) heißt das, dass QPainterpath wenn ich eine Linie damit zeichne sich diese linie immer als ein Element abspeichert und, dass ich somit mit elementAt() dann eine QLine z.B.: zurückbekomme?