AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi ist ein Punkt rechts oder links von einer Strecke!?
Thema durchsuchen
Ansicht
Themen-Optionen

ist ein Punkt rechts oder links von einer Strecke!?

Ein Thema von StefanDP · begonnen am 15. Aug 2005 · letzter Beitrag vom 16. Aug 2005
Antwort Antwort
StefanDP

Registriert seit: 11. Apr 2004
294 Beiträge
 
#1

ist ein Punkt rechts oder links von einer Strecke!?

  Alt 15. Aug 2005, 22:58
Hallo.

Ich habe 3 Punkte ABC

A wird mit C verbunden und es wird geschaut ob Punkt B relativ zu dieser Strecke AC links oder rechts ist.

Ich habe bereits eine Lösung für das Problem aber ich weiß nicht WARUM das so funktioniert.

Delphi-Quellcode:
function TKarte.BRechtsVonAC(A,B,C: TPoint): Boolean;
var
  x_ab, y_ab, x_ac, y_ac: Double;
begin
  x_ab := A.X - B.X; // Delta x von A nach B
  y_ab := A.Y - B.Y; // Delta y von A nach B
  x_ac := A.X - C.X; // Delta x von A nach C
  y_ac := A.Y - C.Y; // Delta y von A nach C

  result := (x_ab*y_ac - y_ab*x_ac ) >= 0;
  // Gibt TRUE zurück, wenn Pkt. B rechts im Bezug auf die Strecke AC ist
end;
Kann mir das mal jemand erklären, wär echt nett.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#2

Re: ist ein Punkt rechts oder links von einer Strecke!?

  Alt 15. Aug 2005, 23:09
Zuerst solltest du ma klären was links und rechts ist
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#3

Re: ist ein Punkt rechts oder links von einer Strecke!?

  Alt 16. Aug 2005, 00:09
Was du in deiner Berechnung anwendest ist das Vektorprodukt. Das Vektorprodukt zwischen 2 vektoren ist wieder ein Vektor, der senkrecht zu den beiden vorigen steht. Die Frage ist nur, ob nach oben oder untern gerichtet.

Ich vereinfache die Rechnung mal ein bischen. Du hast die Punkte A, B, C. Ich lege A jetzt mal in den Ursprung, und hat somit die, geht leider nicht anders beim Vektorprodukt, die 3-dimensionalen Raumkoordinaten A(0,0,0).

Als Vektor c (klein geschrieben), sei nun der Vektor den du in der Zeichnungdargestellt hast, also von A nch C zeigend. Anlog definiere ich mir einen Vektor b von A nach b zeigend. Die Koordinaten von diesen beiden Vektoren sind nichts anderes als die in deiner Rechnung angegeben, x_ab, y_ab, x_ac und y_ab. Ich finde meins aber übersichlicher.

Wir haben nun also die beiden Vektoren c und b. Die Frage ist, wie sieht der Winkel zwischen c und b aus. Winkel werden immer im Gegenuhrzeigersinn betrachtet. Ist also der Winkel zwischen c und b (von Vektor c ausgehend) kleiner als 180°, so liegt B links von c, ansonsten b. Sieht schwierig aus, aber genau das Vektorprodukt gibt dir im Endeffekt diesen Sachverhalt an. Die z-Komponenten von Vektor c und b sind beide null. Die Vektoren liegen also beide in der gleichen Ebene. Das Vektorprodukt c kreuz b (c X b) gibt also einen Vektor an, der nur eine z-Komponente besitzt. diese ist nun positiv oder eben negativ. Hier mal die Komponentendarstellung des Vektorproduktes, wobei uns wirklich nur die z-Komponente interessiert:
(c X b)_x = c_y*b_z - b_y*c_z
(c X b)_y = c_z*b_x - b_z*c_x
(c X b)_z = c_x*b_y - b_x*c_y =: Z

Ist Z positiv, so ist c X b linksdrehend, d.h. B liegt links
Ist Z negativ, so ist c X b rechtsdrehend, d.h. B liegt rechts..

Die Bedingung ist also wieder die aus deiner Lösung.

Mach dich am besten mal mit dem Vektorprodukt genauer vertraut. Ist hier im forum so schwer genau zu erklären.
  Mit Zitat antworten Zitat
StefanDP

Registriert seit: 11. Apr 2004
294 Beiträge
 
#4

Re: ist ein Punkt rechts oder links von einer Strecke!?

  Alt 16. Aug 2005, 00:25


Vielen Dank für die echt gut Erklärung!
Hab mir das mit dem Vektorprodukt nochmal genau durch den Kopf gehen lassen! Es ist einfach genial.

Ab und zu muss man halt die Lösung in einer höheren Dimension suchen
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#5

Re: ist ein Punkt rechts oder links von einer Strecke!?

  Alt 16. Aug 2005, 01:25
Zitat von StefanDP:
Ab und zu muss man halt die Lösung in einer höheren Dimension suchen
Bei 3 Dimensionen ist das ja noch lustig. Was darüber hinaus geht bedingt schon etliche Bierchen um da noch Vorstellungsvermögern zu erschaffen. In dem Sinne
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:51 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