Problem "Linien verbinden"
Übersicht

AvaGastBetreff: Problem "Linien verbinden" |
![]() Antworten mit Zitat |
|
---|---|---|
Hallo Leutz,
ich habe folgendes Problem, dass mir nun schon den ganzen Abend mein Köpfchen zum Rauchen bringt: Ich möchte mehrere Linien-Segmente variabler Breiten miteinander verbinden. Mit dem Standard-DrawLine von BMax ( bzw. OpenGL ) funktioniert dies natürlich nicht, da man dort keinen vernünftigen Übergang zwischen den einzelnen Linien erhält. Die Segmente bestehen in meinem Fall quasi aus "verzerrten" Rechtecken, deren vier Vetexpunkte ich mittels der Linienpositionen und Atan2/Cos/Sin berechne. Hierbei passiert es allerdings sehr häufig, dass die Segmente "verdreht" werden. Ich habe hierzu eine Skizze gezeichnet, die das Problem verdeutlichen soll: Oben: das gewünschte Ergebnis. Unten: der Effekt, wie er zur Zeit u.a. auftreten könnte. Ich habe schon eine Menge rumprobiert - ohne Erfolg. Nun streikt mein Schädel ... und ich hoffe, dass vielleicht jemand von euch einen Lösungsansatz parat hat. ![]() Liebe Grüsse, Ava |
||
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
So wie ich dass jetzt verstanden habe berechnest du doch irgendwann den Winkel der (im Beispiel kürzeren und dicker gezeichneten) Berührungsseiten zwischen den Vierecken.
Falls mich nicht alles täuscht sollte es dann zu einer Überschneidung kommen, wenn die Differenz zwischen diesem beiden Winkeln(EDIT: Modulo 360 mag nötig sein, ohne Code schlecht zu sagen ![]() Wenn du diese Winkel schon hast, sollte sich das ja leicht überprüfen lassen, sodass man dann entsprechend die Eckpunkte vertauschen kann |
||
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans! Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jo, die Winkel müssen identisch oder um 180° verdreht sein, da sie sonst nicht parallel liegen. | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
![]() (Ich habe nochmal die Methode performanter gemacht ohne Cos/Sin-Kram) Betrachte P1-P2 als Vektor d1 und P3-P2 als d2. Bei der Vektorsubtraktion von d1-d2 entsteht ein Vektor j der von P3 nach P1 verläuft. Die Länge und Richtung von j stimmen, aber er liegt im Koordinatenursprung. Zunächst halbierst du j (Skalarmultiplikation mit 1/2) und verschiebst ihn um P3 (Vektoraddition). J ist nun ein Ortsvektor bei dem sich die zwei blauen Linien kreuzen. Um nun auf S1 zu kommen subtrahierst du P2 von j = t. T normalisierst du, in dem du alle Komponenten durch dessen Betrag dividierst, danach hat er die Länge 1. Nun multiplizierst du ihn mit lineWidth/2. S1 ist dann P2 + t und S2 ist P2 - t. Es gibt im übrigens versch. Methoden Linien zu verbinden. Kennste sicher aus Vektorgrafikprogrammen die einmal die obere Methode kennen, aber auch abgeflachte Ecken und abgerundete Ecken. Falls es dich interessiert, guckste mal in einer OpenVG implementierung rein und achtest auf die versch. Line-Join-Styles. mfg olli |
||
vertex.dreamfall.at | GitHub |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group