Thema: Delphi Geometrie

Einzelnen Beitrag anzeigen

track

Registriert seit: 30. Okt 2005
25 Beiträge
 
#9

Re: Geometrie

  Alt 14. Mai 2006, 17:28
hab 3 Punkte, muss jetzt feststellen, ob die einen Dreieck bilden oder eifach auf einer Gerade liegen
hab mir auch überlegt, ob es nicht mit hilfe von Vektorrechnung das problem bewältigt werden kann und zwar:

cos Alpha = A*B/(|A|*|B|)
A*B = a1*b1+a2*b2*+....+aN*bN
|A| = sqrt(sqr(a1)+sqr(a2)+...)
genauso mit |B| und wenn die cos Alpha = 0 dann ist es auf einer gerade.

Delphi-Quellcode:
function DrawDreieck(Figur:TFigur) : boolean;
var VektA_VektB : real; //A*B
    LaengeVA, //laenge des vektors A
    LaengeVB : real; //laenge des vektors A
    x1,x2, //die einzelnen laengen
    y1,y2 : longint;
    Ecke : real; //ergebnis
begin
  x1 := Figur.Dreieck_Daten[1].X - Figur.Dreieck_Daten[2].X;
  y1 := Figur.Dreieck_Daten[1].Y - Figur.Dreieck_Daten[2].Y;
  x2 := Figur.Dreieck_Daten[3].X - Figur.Dreieck_Daten[2].X;
  y2 := Figur.Dreieck_Daten[3].Y - Figur.Dreieck_Daten[2].Y;
  LaengeVA := sqrt(sqr(x1) + sqr(y1)); // <--------
  LaengeVB := sqrt(sqr(x2) + sqr(y2));
  VektA_VektB := x1 * x2 + y1 *y2;
  Ecke := arccos(VektA_VektB / (LaengeVA * LaengeVB));
  if Ecke <> 0 then DrawDreieck := true;
end;

Problem ist in der Zeile mit Pfeil. gibt n Fehler "integerüberlauf" aus
was kann man da tun?

als zugabe - Typen definitionen:
Delphi-Quellcode:
type

  TRechteck = record
                P1 , // Eckpunkte des Rechtecks
                P2 : TPoint;
              end;
              
  TKreis = record
             Aussenpunkt : TPoint; // Eckpunkt des "Quadrats" in das
             Durchmesser : integer; // der Kreis gezeichnet wird
           end; // die Kantenlänge dieses Quadrates

  TDreieck = array[1..3] of TPoint; // Drei Eckpunkte des Dreiecks

  TFigurentyp = (Rechteck,Kreis,Dreieck);
  TFigur = record // Varianter Record
             pen : TColor;
             brush : TColor;
             case Figurentyp : TFigurentyp of
               Rechteck : (Rechteck_Daten : TRechteck);
               Kreis : (Kreis_Daten : TKreis);
               Dreieck : (Dreieck_Daten : TDreieck);
           end;
  Mit Zitat antworten Zitat