- //Dieser Code darf unter den Bedinugen der MPL verwendet werden.
- //(Zu finden etwa unter http://www.mozilla.org/MPL/MPL-1.1.html)
- type
- TRealPoint=record X,Y:Real; end;
- TWegChecker=class
- protected
- XAchse:TRealPoint;
- YAchse:TRealPoint;
- PosVektor:TRealPoint;
- AbstandAB:Real;
- public
- procedure SetData(const A,B:TRealPoint);
- function AufunterschiedlicherSeite(const A1,B1:TRealPoint;const A2,B2:TRealPoint):Boolean;
- function PunktUmrechnen(P:TRealPoint):TRealPoint;
- end;
- implementation
- procedure TWegChecker.SetData(const A,B:TRealPoint);
- begin
- //XAchse zeigt von A nach B
- XAchse.X := B.X-A.X;
- XAchse.Y := B.Y-A.Y;
- //Länge von X und Y-Achse
- AbstandAB := Sqrt(XAchse.X*XAchse.X + XAchse.Y*XAchse.Y);
- //XAchse in Einheits Vektor verwandeln.
- XAchse.X := XAchse.X/AbstandAB;
- XAchse.Y := XAchse.Y/AbstandAB;
- //Die Achse von dem Koordianten System welches entgegenwirkt.
- XAchse.Y := -XAchse.Y;//XAchse wird an der richtigen XAchse gespiegelt.
- //Einen senkrechten Vektor zur X-Achse als Y-Achse verwenden.
- YAchse.X := -XAchse.Y;
- YAchse.Y := XAchse.X;
- //A als Koordianten Ursprung
- PosVektor := A;
- end;
- function TWegChecker.PunktUmrechnen(P:TRealPoint):TRealPoint;
- begin
- // a) Neuer Koordianten Ursprung
- P.X := P.X-PosVektor.X;;
- P.Y := P.Y-PosVektor.Y;;
- // b) Koordianten auf das neue KoordiantenSystem umstellen.
- // Vektoren addieren: KX * XAchse (+) KY*YAchse
- result.X := P.X*XAchse.X + P.Y*YAchse.X;//Erhaltene X Werte zusammenzählen
- result.Y := P.X*XAchse.Y + P.Y*YAchse.Y;//Erhaltene Y Werte zusammenzählen
- end;
- function TWegChecker.AufunterschiedlicherSeite(const A1,B1:TRealPoint;const A2,B2:TRealPoint):Boolean;
- var
- NeuA,NeuB:TRealPoint;
- begin
- SetData(A1,B1);//Koordinaten System festlegen
- NeuA := PunktUmrechnen(A2);//Position von A2 im neuen Koordinaten System
- NeuB := PunktUmrechnen(B2);//Position von B2 im neuen Koordinaten System
- result := (NeuA.y < 0) xor (NeuB.y < 0); //Unterschiedliche Vorzeichen?
- end;