Ich verbrachte viel zu lange das herauszufinden und konnte nicht scheinen, eine einfache Antwort irgendwo zu finden, also dachte ich, ich würde es hier veröffentlichen und einige Leute eine Menge Zeit sparen. Obwohl der ursprüngliche Beitrag alt ist, wünschte ich mir, jemand hätte vor langer Zeit eine einfache Antwort gepostet. Es hätte mir ein paar Tage des Experimentierens erspart.
public static Point PointFromEndOfLine(Point start, Point end, double distance)
{
double x = end.X-start.X;
double y = end.Y-start.Y;
double z = Math.Sqrt(x * x + y * y); //Pathagrean Theorum for Hypotenuse
double ratio = distance/z;
double deltaX = x * ratio;
double deltaY = y * ratio;
return new Point(end.X-deltaX, end.Y-deltaY);
}
Die Funktion nimmt über einen startpoint (x, y) und ein Endpunkt (x, y) und einen Abstand (vom Endpunkt. Wenn der Abstand negativ ist, wird der zurückgegebene Punkt entlang der jenseits der Endpunkt sein gleiche Linie: Wenn Ihr Abstand größer als der Abstand zwischen startPoint und endPoint ist, befindet sich der Rückkehrpunkt vor Ihrem Startpunkt, aber immer noch auf der gleichen Linie.Wenn Ihr Abstand eine positive Zahl ist und kleiner als der Abstand zwischen startPoint und endPoint ist, Der zurückgegebene Punkt befindet sich auf dem Liniensegment zwischen startPoint und endPoint in "distance" vom Endpunkt.
Der Grund, warum es funktioniert, ist "Ähnliche Dreiecke. Stellen Sie sich ein großes rechtes Dreieck vor. Zeichnen Sie eine Meerenge li ne durch das Dreieck parallel zur X-Achse und die x-, y-, z-Werte Ihres großen Dreiecks und der kleinere, der durch die gezeichnete Linie erzeugt wird, sind proportional zueinander.
Mit anderen Worten: x/X == y/Y == z/Z
hoffe, das hilft jemand aus.
Dies ist ein guter boolescher Test, um zu prüfen, ob es einen solchen Punkt D gibt. Es sieht jedoch nicht so aus, als würde es mir sagen, was der Punkt (Punkte) D ist/sind. Es sieht auch so aus, als wäre dies eine unendliche Linie, ich brauche ein Liniensegment. Danke, aber für den Vorschlag. – Ryan