DGL
https://delphigl.com/forum/

Schnittpunkte 2er Geraden.
https://delphigl.com/forum/viewtopic.php?f=20&t=11629
Seite 1 von 1

Autor:  mathias [ Sa Jan 27, 2018 21:27 ]
Betreff des Beitrags:  Schnittpunkte 2er Geraden.

Momentan rechne ich folgendermassen den Schnittpunkt 2er Geraden aus:
Code:
  1. function getSchnitt(p1, p2, p3, p4: TVector2f): TVector2f;
  2. var
  3.   spx: single;
  4. begin
  5.   Result.x := ((p3.y - p1.y) + (p2.y - p1.y) / (p2.x - p1.x) * p1.x - (p4.y - p3.y) / (p4.x - p3.x) * p3.x) /
  6.     ((p2.y - p1.y) / (p2.x - p1.x) - (p4.y - p3.y) / (p4.x - p3.x));
  7.  
  8.   Result.y := ((p2.y - p1.y) / (p2.x - p1.x)) * (Result.x - p1.x) + p1.y;
  9. end;
  10. .......
  11. var
  12.   p1, p2, p3, p4, sp: TVector2f;
  13. begin
  14.   p1 := vec2(170, 150);
  15.   p2 := vec2(10, 50);
  16.   p3 := vec2(120, 10);
  17.   p4 := vec2(40, 80);
  18.  
  19.   sp := getSchnitt(p1, p2, p3, p4);
  20.   Caption := 'X:' + FloatToStr(sp.x) + '  Y:' + FloatToStr(sp.x);
  21.   DrawPoint(sp);


Bevor ich dies in GLSL umsetzte, frage ich zuerst, gibt es in GLSL eine fertige Funktion dafür ?
So ähnlich, wie es für das Kreuzprodukt dot gibt.

Autor:  glAwesome [ So Jan 28, 2018 11:38 ]
Betreff des Beitrags:  Re: Schnittpunkte 2er Geraden.

Dafür gibt es keine fertige Funktion, die bereits im Standardumfang von GLSL enthalten ist. Beachte, dass deine Funktion nicht prüft, ob es überhaupt einen Schnittpunkt gibt. dot ist das Skalarprodukt.

Autor:  mathias [ Di Jan 30, 2018 20:46 ]
Betreff des Beitrags:  Re: Schnittpunkte 2er Geraden.

Zitat:
dot ist das Skalarprodukt.
Ups, da habe ich etwas verwechselt. Das Kreuzprodukt wird für die Senkrecht(Normale) auf einem Polygon verwendet.

Zitat:
Beachte, dass deine Funktion nicht prüft, ob es überhaupt einen Schnittpunkt gibt.
Das musste ich leider auch feststellen. Lazarus spuckt ein "Inf" aus. Dies entspricht einem "division by zero". Was macht GLSL mit solchen Werten ?

Autor:  Vinz [ Di Jan 30, 2018 23:09 ]
Betreff des Beitrags:  Re: Schnittpunkte 2er Geraden.

Es gibt glsl die Funktionen isinf und isnan, die sollte man verwenden, wenn man sowas vermutet und entsprechend abfangen, bzw. einen Wert setzen, mit dem weitergerechnet werden kann.

Autor:  glAwesome [ Mi Jan 31, 2018 07:15 ]
Betreff des Beitrags:  Re: Schnittpunkte 2er Geraden.

Wobei man erwähnen sollte, dass GLSL durchaus mit inf-Werten weiterrechnen kann. Es ist also nicht so, dass das Programm bei einer Division durch 0 abstürzen würde oder so.
Code:
  1. // So rechnet GLSL
  2. float x = 1.0;
  3. float infinity = x / 0.0;
  4. float minus_infinity = -x / 0.0;
  5. float zero = x / infinity;

Autor:  mathias [ Mi Jan 31, 2018 20:55 ]
Betreff des Beitrags:  Re: Schnittpunkte 2er Geraden.

Ich musste gerade feststellen, das meine Formel einen Fehler hat. Wen eine Linie genau senkrecht ist, wird ein "Nan" ausgespuckt.

Ich habe diese Formel übernommen: https://archiv.blendpolis.de/viewtopic. ... 15&t=26215

Ist eine Schnittpunktberechnung so was exotisches, das Google nichts gescheites findet ?

Ich habe es mal mit diesem Trick versucht, jetzt sehe ich wenigstens eine rote und grüne Linie bei der Senkrechten, aber verstümmelt.
Lasse ich die beiden Zeilen weg, dann kommen die Linien gar nicht.

Code:
  1. vec2 SP(in vec2 p1, in vec2  p2, in vec2 p3, in vec2 p4) {
  2.   p1.x += 0.0000001;
  3.   p3.x += 0.0000001;
  4.   vec2 Result;
  5.   Result.x = ((p3.y - p1.y) + (p2.y - p1.y) / (p2.x - p1.x) * p1.x - (p4.y - p3.y) / (p4.x - p3.x) * p3.x) /
  6.     ((p2.y - p1.y) / (p2.x - p1.x) - (p4.y - p3.y) / (p4.x - p3.x));
  7.  
  8.   Result.y = ((p2.y - p1.y) / (p2.x - p1.x)) * (Result.x - p1.x) + p1.y;
  9.   return Result;
  10. }

Kennt jemmand eine Formel, welche funktioniert.

Dateianhänge:
Bildschirmfoto vom 2018-01-31 20-52-15.png
Bildschirmfoto vom 2018-01-31 20-52-15.png [ 7.75 KiB | 10236-mal betrachtet ]

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/