Suchen Sie nach dem schnellsten Weg, um einen Punkt zu berechnen, der auf einer Linie in einem bestimmten Abstand vom Endpunkt der Linie entfernt liegt:
void calculate_line_point(int x1, int y1, int x2, int y2, int distance, int *px, int *py)
{
//calculate a point on the line x1-y1 to x2-y2 that is distance from x2-y2
*px = ???
*py = ???
}
Danke für die Antworten, nein, das ist keine Hausaufgabe, nur etwas aus meinem normalen Fachgebiet heraushacken.
Dies ist die unten vorgeschlagene Funktion. Es ist nicht in der Nähe zu arbeiten. Wenn ich Punkte alle 5 Grad auf dem oberen rechten 90-Grad-Teil eines Kreises als Startpunkte berechne und die Funktion unten mit dem Mittelpunkt des Kreises als x2,y2 mit einem Abstand von 4 aufrufe, sind die Endpunkte völlig falsch. Sie liegen unterhalb und rechts vom Mittelpunkt und sind so lang wie der Mittelpunkt. Hat jemand Vorschläge?
void calculate_line_point(int x1, int y1, int x2, int y2, int distance)
{
//calculate a point on the line x1-y1 to x2-y2 that is distance from x2-y2
double vx = x2 - x1; // x vector
double vy = y2 - y1; // y vector
double mag = sqrt(vx*vx + vy*vy); // length
vx /= mag;
vy /= mag;
// calculate the new vector, which is x2y2 + vxvy * (mag + distance).
px = (int) ( (double) x2 + vx * (mag + (double)distance) );
py = (int) ( (double) y2 + vy * (mag + (double)distance) );
}
Ich habe diese Lösung auf Stackoverflow gefunden, verstehe sie aber nicht vollständig. Kann mir das jemand erklären?
Vielleicht sollten Sie Floats/Doubles verwenden, da Sie Rundungsfehler erhalten. Dies könnte ein Problem sein.
– Lukas
25. November 2009 um 21:41 Uhr
Was Lukas gesagt hat. Außerdem hast du wahrscheinlich meinen Beitrag gelesen, während ich einen Tippfehler hatte. Wenn x1y1 der Ursprung ist, möchten Sie x1y1 + vxvy * (mag + distance), nicht x2y2. Das heißt, Sie möchten ausgehend vom Ursprung die Entfernung zurücklegen zu x2y2 plus die zusätzliche Entfernung, wobei die Richtung von x1y1 nach x2y2 verwendet wird. Obwohl ich denke, dass Sie Ihre Frage vielleicht umformulieren möchten. Was genau willst du machen? Die Frage, wie sie jetzt ist, scheint eher ein Zwischenproblem zu sein.
– Mads Elvheim
5. Dezember 2009 um 2:19 Uhr
Geometrie: Finden eines Punktes entlang einer Linie in einem bestimmten Abstand von einem anderen Punkt!
– Sen Jakob
28. Januar 2016 um 18:38 Uhr