![]() |
2 Vektoren und 1 Punkt, wo näher drann?
Ein bisschen Mathe... Nachhilfe für mich 8-)
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 :))) |
AW: 2 Vektoren und 1 Punkt, wo näher drann?
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.
|
AW: 2 Vektoren und 1 Punkt, wo näher drann?
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... |
AW: 2 Vektoren und 1 Punkt, wo näher drann?
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 |
AW: 2 Vektoren und 1 Punkt, wo näher drann?
Liste der Anhänge anzeigen (Anzahl: 1)
Also ich mache immoment was falsch... Ich habe folgende Prozedur:
Delphi-Quellcode:
Also mein Problem: Das Bild sollte helfen,
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; 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. |
AW: 2 Vektoren und 1 Punkt, wo näher drann?
Zitat:
Grüße |
AW: 2 Vektoren und 1 Punkt, wo näher drann?
Liste der Anhänge anzeigen (Anzahl: 1)
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:
Es kommt, wie du siehst, auch kein Vektor heraus, sondern ein Skalar, aber mehr brauchen wir hier ja auch gar nicht ;)
function „Kreuzprodukt“ (A, B: TVec2): Single;
begin Result := A.X*B.Y - A.Y*B.X; end; [/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 ;) |
AW: 2 Vektoren und 1 Punkt, wo näher drann?
Ach noch etwas:
Delphi-Quellcode:
sieht nicht schön aus.
// das hier
OrtsVektorPrevPoint : array [0..1] of Double; Lieber soetwas:
Delphi-Quellcode:
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
type
TVector2d = record case Boolean of False: (X: Double; Y: Double); True: (Values: Array[0..1] of Double); end; (...) var P: TVector2d; 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; |
AW: 2 Vektoren und 1 Punkt, wo näher drann?
Zitat:
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? |
AW: 2 Vektoren und 1 Punkt, wo näher drann?
Zitat:
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) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:44 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