Frage

Ich habe so viele Stunden dafür ausgegeben Ich kann mein Verstand langsam fühlen rutscht. So dass jede Hilfe wirklich wirklich geschätzt würde. Ich werde versuchen, so knapp wie möglich.

Ich habe einen Kreis auf einer 2D-Ebene. Ich kenne die kartesischen Koordinaten für sie zentralen Punkt (C) und der Radius (R) ist.

Meine Verwirrung ergibt sich aus diesem Problem. Wenn sie mit einem Punkt auf der Ebene außerhalb des Kreises vorgesehen ist; Ich kann den Punkt (P) auf den Umfang des Kreises berechnen die am nächsten zu diesem Punkt.

Was ich tun möchte, ist den (x, y) Koordinaten von zwei Punkten auf dem Umfang zu bestimmen. Nennen wir sie P1 und P2. P1 und P2 sind zwei Enden eines Bogens. Der Lichtbogen ist mit einer festen Länge (X). P ist der Punkt auf halben Weg zwischen P1 und P2. Als solche sind die Bogenlänge von P nach P1 & P auf P2 beide X / 2.

Kurz gesagt: gegeben C, R, P, X; Ich brauche P1 und P2 zu berechnen.

Ich versuche, diese in c-Code ++ aber irgendwelche Vorschläge oder Pseudo-Code wäre toll.

EDIT: X ist eine Lichtbogenlänge, keine gerade Linie zwischen P1 und P2

War es hilfreich?

Lösung

Auf einem Kreis, ein Winkel theta entspricht eine Bogenlänge von theta * R, Ihren Bogen bedeutet einen Winkel von theta = X / R pannen. Also, wenn Start mit Ihrem Punkt

P = C + R * (sin(u), cos(u))

dann gehen Sie einfach nach oben / unten durch theta/2:

P1 = C + R * (sin(u + theta/2), cos(u + theta/2))

und

P2 = C + R * (sin(u - theta/2), cos(u - theta/2))

Andere Tipps

einen Bogen, der einen Winkel von ? (in Radiant) eine Bogenlänge von & theta; R. Also, wollen Sie einen Halbwinkel von ? = X / (2R). Sie müssen dann den Vektor (P C) nehmen, drehen Sie es um Winkel von ± ?, und fügen Sie in C zurück P1 und P2 zu erhalten. Einen Vektor, um einen Winkel zu drehen, Multipliziere sie mit einer Rotationsmatrix .

Also, in Pseudo-Code, würde es so aussehen:

θ = X/(2R)
A = 2x2 rotation matrix corresponding to a rotation by θ radians
A' = transpose of A
P1 = C + A * (P - C)
P2 = C - A' * (P - C)

Es gibt ein paar Dinge, die helfen könnten. Not Gonna den Code zu schreiben, aber ich stelle mir die Lösung auf Dreiecken zu basieren wird. Bedenken Sie:

Jeder Radius ist gleich lang sind.

Damit das Dreieck gezeichnet von P1-P1-C ist gleichschenklig.

Jede Tangente senkrecht zum Radius.

würde ich hart bedrängt werden es hier zu beweisen, und jetzt, aber wenn man die Linien von C durch P1 / P2 zur Tangente verlaufen, dass schneidet der Kreis an C-> P auch ein gleichschenkliges bilden.

Sollte einfach von dort aus zu verstehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top