AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein 2 Vektoren und 1 Punkt, wo näher drann?
Thema durchsuchen
Ansicht
Themen-Optionen

2 Vektoren und 1 Punkt, wo näher drann?

Ein Thema von Jonas Shinaniganz · begonnen am 5. Apr 2012 · letzter Beitrag vom 12. Apr 2012
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Jonas Shinaniganz
Jonas Shinaniganz

Registriert seit: 30. Aug 2011
249 Beiträge
 
Delphi XE5 Ultimate
 
#1

2 Vektoren und 1 Punkt, wo näher drann?

  Alt 5. Apr 2012, 15:54
Ein bisschen Mathe... Nachhilfe für mich

Ich habe 2 Vektoren und einen Punkt. Im 2-Dimensionalem Raum. (2 Achsen Koordinatensystem)

Jetzt würde Ich gerne wissen an welchem Vektor der Punkt dichter drann ist.

Oder besser: Ist der Dichteste Punkt zwischen meinem Punkt und dem Dichtesten Punkt des Vektors an meinem Punkt immernoch weiter Weg als der dichteste Punkt vom anderen Vektor (aus der Sicht meines Punktes).

Dafür müsste Ich vielleicht zu erst wissen wie ich den Dichtesten Punkt eines Vektors an meinem Punkt errechne, dann kann ich mir aus den Beiden Punkten einen Vektor errechnen und daraus dann die Länge als Betrag und dann mit dem anderen das Gleiche und dann vergleichen

Ich weiß also schon genau was Ich machen will habe nur keinen Plan.

Grüße ))
Die Leiter der Entwicklungsabteilung dreht total am Mausrad!
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#2

AW: 2 Vektoren und 1 Punkt, wo näher drann?

  Alt 5. Apr 2012, 16:05
Ein Vektor hat an sich keinen Abstand zu irgendwas, da er lediglich eine Richtungs- und Längeninformation trägt, aber keine Ortsinformation. Meinst du Ortsvektoren? Für die ist der Koordinatenursprung als Fußpunkt definiert, womit die zumindest schon mal einen Ort haben. Dann muss man nur noch gedanklich den Schritt machen, und aus Fußpunkt sowie vom Vektor angezeigten Bildpunkt eine Strecke bilden, und zu DER ließe sich ein Abstand errechnen.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.381 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: 2 Vektoren und 1 Punkt, wo näher drann?

  Alt 5. Apr 2012, 16:09
Hi,

das ist im Grunde eine Schnittberechnung zwischen Vektor und Kreis um den Punk P - wie das allerdings per Vektorrechung geht habe ich keinen Plan...
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#4

AW: 2 Vektoren und 1 Punkt, wo näher drann?

  Alt 5. Apr 2012, 16:16
Ortsvektoren A, B
Punkt P

Berechne AP -> P - A
Berechne BP -> P - B

Wenn |AP| < |BP| dann näher an A;
sonst näher an B
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Benutzerbild von Jonas Shinaniganz
Jonas Shinaniganz

Registriert seit: 30. Aug 2011
249 Beiträge
 
Delphi XE5 Ultimate
 
#5

AW: 2 Vektoren und 1 Punkt, wo näher drann?

  Alt 5. Apr 2012, 16:31
Also ich mache immoment was falsch... Ich habe folgende Prozedur:

Delphi-Quellcode:
function TSetPoints.PrevPointCloser(Index : Integer; X,Y : Double): Boolean;
var
  OrtsVektorPrevPoint : array [0..1] of Double;
  OrtsVektorNextPoint : array [0..1] of Double;

  VektorPrevPoint : array [0..1] of Double;
  VektorNextPoint : array [0..1] of Double;

  BetragVektorPrev : Double;
  BetragVektorNext : Double;
begin
  Result := True;
  OrtsVektorPrevPoint[0] := FPoints[Index - 1].FX;
  OrtsVektorPrevPoint[1] := FPoints[Index - 1].FY;

  OrtsVektorNextPoint[0] := FPoints[Index + 1].FX;
  OrtsVektorNextPoint[1] := FPoints[Index + 1].FY;
  // Vektor NewP->PrevP
  VektorPrevPoint[0] := OrtsVektorPrevPoint[0] - X;
  VektorPrevPoint[1] := OrtsVektorPrevPoint[1] - Y;
  // Vektor NewP->NextP
  VektorNextPoint[0] := OrtsVektorNextPoint[0] - X;
  VektorNextPoint[1] := OrtsVektorNextPoint[1] - Y;

  // Länge (Betrag) des Vektors
  BetragVektorPrev := sqrt(power(VektorPrevPoint[0], 2) + power(VektorPrevPoint[1], 2));
  BetragVektorNext := sqrt(power(VektorNextPoint[0], 2) + power(VektorNextPoint[1], 2));

// if FPoints[I + 1].FX dichter an FPoints[I].X als FPoints[I - 1].FX then
  if (BetragVektorPrev < BetragVektorNext) then
    Result := False;
end;
Also mein Problem: Das Bild sollte helfen,

Der Grüne Punkt ist mein X,Y was Ich der Prozedur übergebe,
Die SChwarze Linie ist mein Graph. Die Roten Punkte die Werte des Graphen, verbunden durch die Schwarzen Linien.

Immoment Berechne Ich die beiden Roten Vektoren und schaue welcher kürzer ist. Ich will aber den Betrag der Grauen Linien berechnen und die länge vergleichen...

aber es geht vorran.
Miniaturansicht angehängter Grafiken
unbenannt.jpg  
Die Leiter der Entwicklungsabteilung dreht total am Mausrad!
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.381 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: 2 Vektoren und 1 Punkt, wo näher drann?

  Alt 5. Apr 2012, 16:37

Immoment Berechne Ich die beiden Roten Vektoren und schaue welcher kürzer ist. Ich will aber den Betrag der Grauen Linien berechnen und die länge vergleichen...
also gehts dir um den senkrechten Abstand zum Vektor (der im übrigend nicht der kürzeste Abstand sein muss) - das ist einfach: Zieh eine weitere Rote Linie zu dem Polygonpunkt in der Mitte (das Rote X). Damit kannst Du alle Längen in dem Dreieck bestimmen, über die Längen die Winkel und mit den Winkeln in einem der rechtwinkligen Dreiecke in denen der Abstand eine Kathete ist, diese berechnen. So würde ich das Problem lösen, weiß nicht ob es da verktortechnisch andere Vorgehensweisen gibt...

Grüße
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#7

AW: 2 Vektoren und 1 Punkt, wo näher drann?

  Alt 5. Apr 2012, 17:00
Den senkrechten Abstand zu einer Strecke kannst du im zweidimensionalen Raum über das Kreuzprodukt berechnen (s. Anhang).
[edit]
Sorry, habe wohl zu lange mit dreidimensionalen Vektoren hantiert... Das „Kreuzprodukt“ ist ja für den zweidimensionalen Raum nicht wirklich definiert. Was ich damit meinte ist:
Delphi-Quellcode:
function „Kreuzprodukt“ (A, B: TVec2): Single;
begin
  Result := A.X*B.Y - A.Y*B.X;
end;
Es kommt, wie du siehst, auch kein Vektor heraus, sondern ein Skalar, aber mehr brauchen wir hier ja auch gar nicht
[/edit]

Btw, darf man fragen, was du programmierst? Deine Skizze erinnert mich nämlich extrem an den kleinen Sonic-Klon (* nicht wirklich ein Klon, aber die Engine nachprogrammiert), den ich letztes Jahr geschrieben habe
Miniaturansicht angehängter Grafiken
scr5158_20120405.png  

Geändert von Namenloser ( 5. Apr 2012 um 17:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#8

AW: 2 Vektoren und 1 Punkt, wo näher drann?

  Alt 5. Apr 2012, 17:31
Ach noch etwas:
Delphi-Quellcode:
// das hier
  OrtsVektorPrevPoint : array [0..1] of Double;
sieht nicht schön aus.

Lieber soetwas:
Delphi-Quellcode:
type
  TVector2d = record
  case Boolean of
    False: (X: Double; Y: Double);
    True: (Values: Array[0..1] of Double);
  end;

(...)
var
  P: TVector2d;
Damit kannste nämlich direkt per P.X und P.Y oder P.Values[0] und P.Values[1] auf die X & Y Koordinaten zugreifen

Praktisch sind dann noch folgende Erweiterungen:
Delphi-Quellcode:
  TVector2d = record
    procedure Assign(const newX, newY: Double);
    function Length: Double;
  case Boolean of
    False: (X: Double; Y: Double);
    True: (Values: Array[0..1] of Double);
  end;
    

procedure TVector2d.Assign(const newX, newY: Double);
begin
  X := newX;
  Y := newY;
end;

function TVector2d.Length: Double;
begin
  Result := SQRT(X*X + Y*Y);
end;
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG

Geändert von Aphton ( 5. Apr 2012 um 17:34 Uhr)
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#9

AW: 2 Vektoren und 1 Punkt, wo näher drann?

  Alt 5. Apr 2012, 17:36
Ich habe 2 Vektoren und einen Punkt. Im 2-Dimensionalem Raum. (2 Achsen Koordinatensystem) ... an welchem Vektor der Punkt dichter drann ist
Das Wort Vektor macht so keinen Sinn. (wie schon Medium festgestellt hat)
Zwei Geraden und ein Punkt, das würde deutlich mehr Sinn ergeben.
Bitte nicht mehr vom Vektor sprechen, wenn eine Gerade gemeint ist.

Eine Gerade kann auf zwei Arten definiert werden:
* 2 Punkte (nicht gleich) durch die die Gerade läuft
* eine Punkt und ein (Richtungs-)vektor (mit Länge > 0)
Beide Darstellungen lassen sich in einander uumrechnen.

Dann reduziere das Problem auf:
Welchen Abstand hat ein Punkt im 2D-Raum von einer Geraden?
Andreas

Geändert von shmia ( 5. Apr 2012 um 17:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#10

AW: 2 Vektoren und 1 Punkt, wo näher drann?

  Alt 5. Apr 2012, 17:43
Den senkrechten Abstand zu einer Strecke kannst du im zweidimensionalen Raum über das Kreuzprodukt berechnen (s. Anhang).
[edit]
Sorry, habe wohl zu lange mit dreidimensionalen Vektoren hantiert... Das „Kreuzprodukt“ ist ja für den zweidimensionalen Raum nicht wirklich definiert. Was ich damit meinte ist:
Delphi-Quellcode:
function „Kreuzprodukt“ (A, B: TVec2): Single;
begin
  Result := A.X*B.Y - A.Y*B.X;
end;
Es kommt, wie du siehst, auch kein Vektor heraus, sondern ein Skalar, aber mehr brauchen wir hier ja auch gar nicht
[/edit]
Richtig wäre es so (Skalarprodukt):
A.X * B.X + A.Y * B.Y

=P

Edit: Soweit ich das richtig in Erinnerung, haben wir bei der Formel cos(Winkel) = (a x b) / (|a| * |b|) beim "x" das Skalarprodukt berechnet (im 2D Raum)
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 23:33 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