Seite 1 von 1

kürzester Abstand eines Punktes zu beliebigem QPainterPath

Verfasst: 4. Dezember 2010 10:33
von Hugo
Hallo!

Ich möchte den kürzesten Abstand eines Punktes A zur Oberfläche eines beliebigen QGraphicItems berechnen. Dazu habe ich mir überlegt, den Umriss (also den QPainterPath, den man mit QGraphicsItem::shape () bekommt) in (endlich viele) Punkte zu zerlegen, den Abstand dieser Punkte zu A zu berechnen und dann den kleinsten rauszusuchen.
Ich hab schon mal in der Qt-Hilfe geschaut, ob es nicht schon eine fertige Funktion dafür gibt (die z.B. die Koordinaten aller Pixel des Path's in ein Array schreibt) aber ich hab nichts gefunden.

Kann mir jemand einen Tip geben, wie ich mein Problem lösen könnte?

Vielen Dank für eure Hilfe!

Verfasst: 4. Dezember 2010 10:40
von kater
Suchst du vllt. sowas wie QPainterPath::elementAt ( int index ) ?

Verfasst: 4. Dezember 2010 11:23
von Hugo
Hallo kater,

danke für den Tip.
In der Hilfe steht, dass jeder QPainterPath aus (moveTo(), lineTo() and cubicTo())-Elementen besteht, und dass man mit QPainterPath::elementCount () rauskriegt, wie viele es sind, und mit QPainterPath::elementAt(int index) dann den jeweiligen Typ des Elements bestimmen kann.
Also müsste ich die Abstandsberechnung für jedes Element einzeln durchführen (gerade vor dem cubicTo() graust es mir). Ich werde erstmal testen, wie das funktioniert, aber kennt nicht jemand vielleicht eine einfachere Methode?

Verfasst: 4. Dezember 2010 12:13
von upsala
Den QPainterPath in ein QPolygonF umwandeln lassen, dann brauchen die Berechnungen nur noch für Linien durchgeführt werden.

Verfasst: 4. Dezember 2010 16:20
von Hugo
Vielen Dank für die Tips. Ich probier das jetzt mal alles aus und melde mich bei weiteren Fragen