Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Möchte Entfernung von 2 Punkten auf einem Bild berechnen. (https://www.delphipraxis.net/126904-moechte-entfernung-von-2-punkten-auf-einem-bild-berechnen.html)

Mokuba01 4. Jan 2009 16:58


Möchte Entfernung von 2 Punkten auf einem Bild berechnen.
 
Hallo,

Ein Punkt auf einem Bild(TImage) steht schon fest. Wenn man jetzt auf einen Punkt im Bild klickt, soll die Entfernung berechnet werden.
Wie könnte man das machen?

Danke im Vorraus
mfg Mokuba01

PS: Vielleicht ein unsichtbares Dreieck zeichnen und dann die Diagonale berechnen?

taaktaak 4. Jan 2009 17:00

Re: Möchte Entfernung von 2 Punkten auf einem Bild berechnen
 
Warum willst du ein unsichtbares Dreieck zeichnen? Nur im Gedanken! Du hast den Ausgangspunkt und im OnClick() die Koordinate des Endpunktes. Dann hilft der Pythagoras und die Entfernung ist berechnet.

fkerber 4. Jan 2009 17:01

Re: Möchte Entfernung von 2 Punkten auf einem Bild berechnen
 
Hi!

Deine Idee mit dem Dreieck ist schon genau die richtige!
Nur brauchst du es ja nicht wirklich zu zeichnen. Aber mit dem Satz des Pythagoras solltest du hier weiterkommen.
Du kennst ja quasi die Eckpunkte eines rechtwinklingen Dreiecks und die Längen der beiden Katheten somit auch. Dann kannst du die gesuchte Länge leicht ermitteln!

Wenn es Probleme gibt, wäre es schön, wenn du uns den Quelltext, den du bisher hast zeigen könntest und genau beschreiben könntest, wo es hakt!


Ciao, Frederic

ghost007 4. Jan 2009 17:02

Re: Möchte Entfernung von 2 Punkten auf einem Bild berechnen
 
Naja, einfach im onlclick even die maus coordinaten abreifen.
Und an über http://de.wikipedia.org/wiki/Pythagoras#Mathematik

MfG - Ghost007

Edit: Redbox :P

mr_emre_d 4. Jan 2009 17:38

Re: Möchte Entfernung von 2 Punkten auf einem Bild berechnen
 
Punkte: A, B
Vektor AB ausrechnen ( B-A )
Länge = |AB|

Konkretes Beispiel:

Punkt A: x = 10 y = 20
Punkt B: x = 50 y = 30
Vek. AB: B.X-A.X, B.Y-A.Y -> x = 40 y = 10

Pythagoräische Lehrsatz:
c² = a² + b²
--> c = WurzelAus( a² + b² )
a und b sind die x und y Punkte des Vekotrs

Länge = SQRT( Vek.X*Vek.X + Vek.Y*Vek.Y )

DeddyH 4. Jan 2009 18:03

Re: Möchte Entfernung von 2 Punkten auf einem Bild berechnen
 
Auch einen Blick wert wäre die Funktion Hypot aus der Unit math.

Mokuba01 4. Jan 2009 20:09

Re: Möchte Entfernung von 2 Punkten auf einem Bild berechnen
 
Hi,
Delphi-Quellcode:
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  PunktA:TPoint;
  PunktB:TPoint;
  PunktC:TPoint;
{...}
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
Langex,Langey:integer;
Lange:Extended;
begin
Punktb.X:=X;
Punktb.Y:=Y;
Punktc.X:=Punkta.X;
punktc.Y:=Punktb.Y;
Langex:=Punkta.X-Punktc.X;
Langey:=Punktb.Y-Punktc.Y;
if Langex<0 then
Langex:=Langex*(1-2);
if Langey<0 then
Langey:=Langey*(1-2);
Lange:=Hypot(Langex,Langey);
if Lange<0 then
Lange:=Lange*(1-2);
application.MessageBox(PChar(FloatToStr(Lange)),'',MB_OK);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
PunktA.X:=15;
PunktA.Y:=15;
end;
Leider kommt dort immer null raus. Was mach ich falsch?
mfg Mokuba01

jfheins 4. Jan 2009 20:29

Re: Möchte Entfernung von 2 Punkten auf einem Bild berechnen
 
:wall:


Delphi-Quellcode:
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  PunktA:TPoint;

{...}
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
DeltaX, DeltaY, Laenge: real;
begin
DeltaX = PunktA.X - X;
DeltaY = PunktA.Y - Y;

Laenge = Hypot(DeltaX, DeltaY);

showmessage(floattostr(laenge));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
PunktA.X:=15;
PunktA.Y:=15;
end;
So in der Art :stupid:

Dunkel 5. Jan 2009 05:09

Re: Möchte Entfernung von 2 Punkten auf einem Bild berechnen
 
Zitat:

Zitat von Mokuba01
Delphi-Quellcode:
Langex:=Langex*(1-2);

[ot]Vielleicht sollte man dieses Konstrukt noch hier aufnehmen... :lol:[/ot]


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:56 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz