2010-11-05 17 views
9

Ho trascorso così tante ore su questo punto che posso sentire la mia sanità mentale scivolare lentamente. Quindi qualsiasi aiuto sarebbe veramente apprezzato. Cercherò di essere il più sintetico possibile.Come calcolare (x, y) per una lunghezza d'arco fissa lontano da un punto su una circonferenza

Ho un cerchio su un piano 2D. Conosco le coordinate cartesiane per il suo punto centrale (C) e il raggio (R).

La mia confusione deriva da questo problema. Quando fornito con un punto sul piano al di fuori del cerchio; Posso calcolare il punto (P) sulla circonferenza del cerchio più vicino a quel punto.

Quello che voglio fare è determinare le coordinate (x, y) di 2 punti sulla circonferenza. Chiamiamoli P1 e P2. P1 e P2 sono due estremità di un arco. L'arco ha una lunghezza fissa (X). P è il punto intermedio tra P1 e P2. Come tale, la lunghezza dell'arco da P a P1 & P a P2 sono entrambi X/2.

In breve: dato C, R, P, X; Devo calcolare P1 e P2.

Sto provando a codificarlo in C++ ma qualsiasi suggerimento o pseudo-codice sarebbe fantastico.

EDIT: X è una lunghezza d'arco, non una linea retta tra P1 e P2

+19

Come ottenere alcuni esempi da: http://www.codeproject.com/KB/recipes/Wykobi.Aspx Sono molto efficienti e alquanto eleganti, cercano "Punto più vicino sul cerchio da punti esterni" e "Segmenti tangenti del cerchio" –

risposta

4

su un cerchio, un angolo theta corrisponde ad una lunghezza d'arco di theta * R, cioè proprio arco si sottendere un angolo di theta = X/R. Quindi, se inizia con il punto di

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

poi basta andare su/giù per theta/2:

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

e

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

un arco che sottende un angolo di θ (in radianti) ha una lunghezza dell'arco di θR. Quindi, vuoi un mezzo angolo di θ = X/(2R). È quindi necessario prendere il vettore (P -C), ruotarlo di angoli di ± θ e aggiungere nuovamente in C per ottenere P1 e P2. Per ruotare un vettore di un angolo, moltiplicarlo per un rotation matrix.

Così, in pseudocodice, sarebbe simile a questa:

θ = 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) 
0

Ci sono alcune cose che potrebbero aiutare. Non scriverò il codice ma immagino che la soluzione sarà basata su triangoli. Considerare:

Qualsiasi raggio ha la stessa lunghezza.

Quindi il triangolo estratto da P1-P1-C è isoscele.

Qualsiasi tangente è perpendicolare al raggio.

Sarebbe difficile comprovarlo qui e ora, ma se si estendono le linee da C a P1/P2 alla tangente che interseca il cerchio in C-> P si forma anche un isoscele.

Dovrebbe essere facile da capire da lì.

Problemi correlati