|
Ich hab ein ernstes Problem! Es geht um Shaderprogrammierung aber ich versuch mal das Problem in normaler Mathesprache darzustellen.
Ich habe ein Dreieck mit den Punkten . Das Dreieck ist gleichschenklig. Wir benutzen DirectX und in dem speziellen Schritt wird jeder Pixel auf dem Bildschiem des Dreiecks über die 3 Punkte linear interpoliert. Sind 2 Punkte zb gelb und der dritte rot und ist der pixel genau in der Mitte des Dreiecks wird der Pixel grün, befindet sich der Pixel zwischen den beiden gelben Punkten auf der Kante, dann wird der Pixel gelb.
Leider geht bei dieser linearen Interpolation etwas verloren – und zwar die Position des Pixels im Dreieck! Ich weiß also nicht wo sich der Pixel befindet – und genau das muss ich wissen.
In unserem Fall geht es um Transparenz. Der Punkt a hat die Transparenz die beiden Punkte und haben die Transparenz 0.
Ich muss aber den Abstand des Pixels zum Punkt a wissen. Hat die interpolation zb. ergeben, dann kommen für den Abstand zum Punkt a viele Punkte – nämlich eine Gerade in Betracht. So wie oben: Ist der Punkt gelb, dann kommt die ganze Kante zwischen den gelben Punkten in Betracht.
Meine Idee ist jetzt folgende: Anstatt 1 Wert für die Transparenz (für die Punkte wäre das nehme ich 3. Und zwar für den ersten Punkt, für den zweiten und für den dritten. Wenn er dann nach der interpolation für alle drei werte das selbe rausbekommt, weiß ich dass sich der Pixel genau in der Mitte des Dreiecks befindet und ich komme somit auf den Abstand zum Punkt .
Könnt ihr mir einen Tipp geben wie ich auf eine Funktion komme wie ich diese 3 interpolierten Werte in umrechnen kann?
Es ist ein wenig so wie wenn ihr euch an drei Seilen an 3 Bäumen festbindet dass sie gespannt sind. Über das Verhältnis der Längen könnt ihr euch im Wald milimetergenau orten.
Nachschlag: Eine Skizze. Ihr seht das Dreieck mit den Vektoren deren Elemente interpoliert werden. Für und hab ich mal Linien eingezeichnet. Als Beispiel dient Punkt P. Der hat den Vektor . Ich weiß damit dass er auf 3 Geraden Parallel zu den Dreiecksseiten liegt. Aber ich will den Abstand haben.
Und nochmal: ICH HABE KEINE KOORDINATEN! Es geht nur über das Verhältnis zb im Verhältnis zu der Dreiecksseite.
Natürlich ergibt die Addition der 3 Werte 1. ABer für die Punkte und im Bild - also und muss nachher beide male rauskommen (als Abstand im Verhältnis zur Seite des Dreiecks)
Für alle, die mir helfen möchten (automatisch von OnlineMathe generiert): "Ich benötige bitte nur das Ergebnis und keinen längeren Lösungsweg." |
|
|
(wieso ist eigentlich (gelb+rot)/2 = grün ?)
klingt aus dem Bauch heraus passend
|
|
was soll und sein?
Ich habe keine koordinaten.... ich habe lediglich die 3 werte die in der zeichnung orange, grün und braun sind, die zusammen 1 ergeben.
es geht nicht einfach ddurch so ne einfache gleichung
ich meinte blau sry.
ich glaube du hast das problem nicht ganz gelesen oder verstanden:-)
|
|
die rote Zahl die grüne Zahl die braune Zahl
Beispiel
Beispiel
Beispiel
Die einfache Gleichung haut also zumindest für diese Beispiele hin. Und da das Abstandsquadrat eine quadratische Form in den baryzentrischen Koordinaten sein muss und die angegebene die zum hexagonalen Gitter gehörige Form ist(bleibt invariant unter der Rotation um A um 60°), stimmt die Formel allgemein.
EDIT: Oops, es scheint, dass gar nicht der Schwerpunkt des Dreiecks sein sollte, sondern der Punkt auf der Mittelachse mit Abstand von A. ist demnach gegeben durch und also und Beziehungsweise, wenn durch und gegeben ist, ergibt sich als Abstand
|
|
Ok - jetzt ist es klar.
sollte auch etwa haben da es auf einem Kreis liegt mit . Die Werte dafür hab ich mal aus der Zeichnung gelesen und so gewählt dass es zusammen 1 ergibt.
A kommt dann auf auf und auf jeweils 1.
OK damit komm ich weiter. Vielendank!
|