Einzelnen Beitrag anzeigen

omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Gibt es eine direkte Verbindung zwischen 2 Pixeln

  Alt 10. Okt 2004, 23:21
Moin,

dafür ist etwas Vektorrechnung erforderlich...

Ich habe hier mal die Berechnung für 3D-Punkte angegeben, wenn du nur 2D-Punkte hast lässt du einfach die dritte Dimenstion auf Null.

Delphi-Quellcode:
type
  TPoint3D = packed record
    X: Longint;
    Y: Longint;
    Z: Longint;
  end;

  :

function Point3D(X, Y, Z: Integer): TPoint3D;
begin
  Result.X := X;
  Result.Y := Y;
  Result.Z := Z;
end;

function PunktAufGerade(P1, P2, P3:TPoint3D):boolean;

  function subP(P1, P2:TPoint3D):TPoint3D;
  begin
    Result.X:=P1.X - P2.X;
    Result.Y:=P1.Y - P2.Y;
    Result.Z:=P1.Z - P2.Z;
  end;

  function skalar(a, b:integer):integer;
  begin
    if b = 0 then
      Result:=0
    else
      Result:=a div b;
  end;

var a, b:TPoint3D;
    sX, sY, sZ:integer;
begin
  a:=subP(P2, P1);
  b:=subP(P3, P1);

  sX:=skalar(a.X, b.X);
  sY:=skalar(a.Y, b.Y);
  sZ:=skalar(a.Z, b.Z);

  Result:= (sX = sY)
          and (sX = sZ);
end;

procedure TForm.ButtonClick(Sender: TObject);
var a, b, c:TPoint3D;
begin
  a:=Point3D(3, 0, 4);
  b:=Point3D(1, 1, 1);
  c:=Point3D(-1, 2, -2);
  if PunktAufGerade(a, b, c) then
    showmessage('auf der Gerade')
  else
    showmessage('nicht auf der Gerade');
end;
hier wird getestet, ob die drei Punkte auf einer Geraden liegen.


MfG
Thorsten
  Mit Zitat antworten Zitat