Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Dreieck: Gewichtung der Eckpunkte zu einem Innenliegenden punkt (https://www.delphipraxis.net/158826-dreieck-gewichtung-der-eckpunkte-zu-einem-innenliegenden-punkt.html)

Memnarch 4. Mär 2011 13:58

Dreieck: Gewichtung der Eckpunkte zu einem Innenliegenden punkt
 
Nabend.
Brauche mal eure hilfe.

Also, angenommen ich habe ein Dreieck ABC und einen Punkt P,w elcher im Dreieck ABC liegt, so möchte ich die gewichtung der EckPunkte ABC zu Punkt P berechnen.
BeiSpiel: Wenn P auf PunktA leigt, ist die gewichtung von A = 1. Liegt P aber auf der SeiteA, ist die Gewichtung von A = 0. Dazwischen sind die übergänge dann fließend.

SchauBild(P ist der Grüne Punkt):
http://img851.imageshack.us/img851/4061/punkte.png

Meine herangehensweise wäre:
Gesamtfläche des Dreiecks berechnen, und dann die gewichtung der einzelnen Punkte ABC wie folgt:

Gewichtung von A = Fläche(PBC) / Gesamtfläche.
Gewichtung B = Fläche(PAC) / Gesamtfläche.
Gewichtung C = Fläche(PAB) / Gesamtfläche.

Stimmt dass so?
Dementsprechen müsste ja GewA + GewB + GewC = 1 sein oder? (von der theorethischen annahme, es gäbe keine rundungsfehler ;) )

Edit: Also es sieht zumindest aus als ob es geht. Meine Depthmap sieht ok aus. (schreib an meinem Softwarerenderer, Depthmap calculation ist gerade angesagt)


MFG
Memnarch

himitsu 4. Mär 2011 14:10

AW: Dreieck: Gewichtung der Eckpunkte zu einem Innenliegenden punkt
 
Ich hätte es jetzt so gedacht,

Man denkt sich eine Gerade, welche durch P und den Punkt geht, zu welchem man die Gewichtung ausrechnen will,
darüber berechnet man den Schnittpunkt der Geraden mit der des Punktes gegenüberliegenen Geraden/Seite.
Nun hat man zwei Punkte, also Eckpunkt und Schnittpunkt, was wiederum eine Gerade ergibt und nun einfach nur noch schauen wo auf dieser geraden der Punkt P liegt.

Ich glaub
Delphi-Quellcode:
Abstand P-Schnittpunkt durch Länge der Geraden Eckpunk-Schnittpunkt
oder irgendwie so.
Die Endpunkte der Geraden vielleicht vorher prüfen, da bei den Berechnungen wohl auch mal ein Div-By-Zero entstehen kann.
> liegt P auf dem Eckpunkt, dann isses 1, liegt der auf dem Schnittpunkt, dann 0 und dazischen kann man sich ja wieder Prozentual den Abstand ausrechnen.

Memnarch 4. Mär 2011 14:50

AW: Dreieck: Gewichtung der Eckpunkte zu einem Innenliegenden punkt
 
Ja soetwas hatte ich anfangs auch auf dem plan. Aber war imemr nen ziemlicher wust zum durchlesen :D.

Hab meine Technik überprüft, und joar, sie geht auch, und ist um einiges Kompakter(je nach funktionsverschachtelung^^").

Der weg den ich nehme, basiert auf dem selben um rauszubekommen ob punkt P innerhalb von Dreieck ABC liegt. Dabei werden die Flächen der Dreiecke PAB/PBC/PCA addiert und wenn sie dieselbe fläche wie ABC haben, liegt der punkt dadrin(und der Prozentuale Anteil der kleineren Flächen von der Gesamtfläche, ist die Gewichtung der jeweiligen Punkte :D). Um FloatingPointfehler zu vermeiden(rundung etc), berechne ich aus den dreiecken nicht das Tatsächliche Dreieck, sondern das Quadrat(also Länge*Höhe anstatt Länge*Höhe/2, in kurzform). Erbringt ebenfalls dasselbe ergebnis, hat keine rundungsfehler und funktioniert super. Außerdem lässt sich die flächenberechnung für ein Dreieck leichter merken^^.

Wenn ich am WE zuhause bin, schreib ich den programmcode nochmal(is ja nich viel), da ich jetzt auf der Firma bin, und deswegen weder Screenies noch auszüge posten dürfte. Wen es interressiert, der kann sichs ja mal angucken.

MFG
Memnarch

Khabarakh 4. Mär 2011 15:18

AW: Dreieck: Gewichtung der Eckpunkte zu einem Innenliegenden punkt
 
Baryzentrische Koordinaten

Aber dass eine Division durch 2 Rundungsfehler auslöst, wage ich zu bezweifeln ;) .

Memnarch 4. Mär 2011 15:42

AW: Dreieck: Gewichtung der Eckpunkte zu einem Innenliegenden punkt
 
Äh war emin fehler. Wen man die fläche berechnet, und das in nen Integer kloppt, isses klar dass es fehler gibt >.<.

Dem Blatt über Baryzentrische Koordinaten kann ich noch nicht ganz folgen(mathemathische notationen waren trotz mathe als lieblingsfach NIE meine stärke^^"). Aber wenn ich schwer raten darf, das was da steht, hab ich hinbekommen :D.

MFG
Memnarch


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:42 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz