Comment calculer (x, y) pour une longueur fixe arc à une distance d'un point sur une circonférence

StackOverflow https://stackoverflow.com/questions/4111045

Question

J'ai passé tant d'heures sur ce que je peux sentir ma santé mentale glisser lentement. Ainsi, toute aide serait vraiment vraiment apprécié. Je vais essayer d'être aussi bref que possible.

I ont un cercle sur un plan 2D. Je sais que les coordonnées cartésiennes pour son point central (C) et le rayon (R).

Ma confusion découle de ce problème. Lorsqu'il est fourni avec un point sur le plan extérieur du cercle; Je peux calculer le point (P) sur la circonférence la plus proche de ce point du cercle.

Ce que je veux faire est de déterminer les (x, y) les coordonnées de 2 points sur la circonférence. Appelons-les P1 et P2. P1 et P2 sont deux extrémités d'un arc. L'arc est d'une longueur fixe (X). P est le point à mi-chemin entre P1 et P2. A ce titre, la longueur d'arc de P à P P1 et P2 sont tous deux à X / 2.

En bref: donnée C, R, P, X; Je dois calculer P1 et P2.

Je suis en train de coder cela en C ++, mais des suggestions ou des pseudo-code serait génial.

EDIT: X est une longueur d'arc, et non pas une ligne droite entre P1 et P2

Était-ce utile?

La solution

Sur un cercle, un correspond de theta d'angle à une longueur d'arc de theta * R, ce qui signifie votre arc sous-tendre un angle de theta = X / R. Donc, si votre point de départ

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

puis juste aller haut / bas par theta/2:

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

et

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

Autres conseils

un arc qui sous-tend un angle de θ (en radians) a une longueur d'arc de θR. Donc, vous voulez un demi-angle θ = X / (2R). Vous devez ensuite prendre le vecteur (P C), faites-le pivoter par des angles de ± θ, et rajoutez en C pour obtenir P1 et P2. Pour faire pivoter un vecteur selon un angle, la multiplier par une matrice de rotation .

Alors, en pseudocode, il ressemblerait à ceci:

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

Il y a quelques petites choses qui pourraient aider. Ne va pas écrire le code mais j'imagine que la solution va être basée sur des triangles. Considérez:

Tout rayon est de la même longueur.

Ainsi, le triangle tiré P1-P1-C est isocèle.

Toute tangente est perpendiculaire au rayon.

Je serais pressé difficile de le prouver sur ici et maintenant, mais si vous prolongez les lignes de C à P1 / P2 à la tangente qui coupe le cercle à C> P forment également un isocèle.

doit être facile à comprendre à partir de là.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top