Domanda

ho passato tante ore in questo posso sentire la mia sanità mentale lentamente scivolando. Quindi, qualsiasi aiuto sarebbe veramente veramente apprezzato. Cercherò di essere il più sintetico possibile.

Ho un cerchio su un piano 2D. So 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 all'esterno piano del cerchio; Posso calcolare il punto (P) sulla circonferenza del cerchio più vicino a quel punto.

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

In breve: in C, R, P, X; Ho bisogno di calcolare P1 e P2.

Sto cercando di codice di questo in C ++, ma qualsiasi suggerimento o pseudo-codice sarebbe grande.

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

È stato utile?

Soluzione

In un cerchio, un angolo theta corrisponde a una lunghezza d'arco di theta * R, che significa il tuo arco si sottendere un angolo di theta = X / R. Quindi, se inizio con il punto

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))

Altri suggerimenti

un arco che sottende un angolo di ? (in radianti) ha una lunghezza d'arco di ?R. Quindi, si vuole un mezzo angolo di ? = X / (2R). È quindi necessario prendere il vettore (P -C), ruotarlo di angoli di ± ?, e aggiungere di nuovo in C per ottenere P1 e P2. Per ruotare un vettore di un angolo, moltiplicarlo per un rotazione matrice .

Quindi, 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)

Ci sono alcune cose che potrebbero aiutare. Non andando scrivere il codice ma immagino che la soluzione sta per essere basata su triangoli. Prendere in considerazione:

Ogni raggio è la stessa lunghezza.

Così il triangolo disegnato da P1-P1-C è isoscele.

Qualunque tangente è perpendicolare al raggio.

sarebbe difficile dimostrare fuori proprio qui e ora, ma se estendete le linee da C attraverso P1 / P2 alla tangente che interseca la circonferenza in C-> P anche forma isoscele.

Dovrebbe essere facile da capire da lì.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top