1 votes

aide à la géométrie python

J'ai le problème suivant, j'essaie de trouver les distances suivantes (F1 et F2) : circle

C'est ce que j'ai pour l'instant :

def FindArrow(self, X1, Y1, X2, Y2, X3, Y3):
    self.X1 = float(X1)
    self.Y1 = float(Y1)
    self.X2 = float(X2)
    self.Y2 = float(Y2)
    self.X3 = float(X3)
    self.Y3 = float(Y3)
    #center coords of the circle
    self.Xc = None
    self.Yc = None
    #radius
    self.R = None

    #F1 and F2
    self.FAB = None
    self.FBC = None

    #check if the coordinates are collinear
    invalide = self.X1 * (self.Y2 - self.Y3) + self.X2 * (self.Y3 - self.Y1) + self.X3 * (self.Y1 - self.Y2)
    if (invalide == 0):
        return

    #get the coords of the circle's center
    s = (0.5 * ((self.X2 - self.X3)*(self.X1 - self.X3) - (self.Y2 - self.Y3) * (self.Y3 - self.Y1))) / invalide

    self.Xc = 0.5 * (self.X1 + self.X2) + s * (self.Y2 - self.Y1)
    self.Yc = 0.5 * (self.Y1 + self.Y2) + s * (self.X1 - self.X2)

    #get the radius
    self.R = math.sqrt(math.pow(self.Xc - self.X1, 2) + math.pow(self.Yc - self.Y1, 2))

Jusqu'ici tout semble fonctionner, maintenant quelles seraient les prochaines étapes pour obtenir F1 et F2 ?

EDITAR: Les deux réponses (Tomer et inerjay) semblent fonctionner pour la première image, mais j'ai essayé l'image suivante et cela ne fonctionne plus :

circle2

1voto

interjay Points 51000

Si vous connaissez le rayon du cercle, vous pouvez utiliser le théorème de Pythagore pour obtenir la distance entre le centre du cercle et le segment P2-P3 (regardez le triangle dont les sommets sont situés en P2, au centre du cercle et au milieu de P2-P3) : P2, le centre du cercle, et le milieu de P2-P3). Soustrayez ensuite cette distance du rayon pour obtenir F2. Même méthode pour obtenir F1.

Modifier : Si vous appelez x la distance entre le centre et le segment P2-P3, alors F2 est soit R-x (comme dans la première image), ou R+x (comme dans la deuxième image). Cela dépend de la façon dont vous définissez F1 et F2.

Si vous définissez F1 et F2 de manière à ce qu'ils aillent toujours vers l'extérieur du triangle P1-P2-P3 (cela correspond à vos deux exemples), alors F2 = R-x si le centre du cercle est du même côté de P2-P3 que P1, et F2 = R+x si P1 et le centre du cercle sont sur les côtés opposés de P2-P3.

0voto

Tomer Vromen Points 911

Si je comprends bien, les segments F1,F2 pointent vers le centre du cercle. Marquez le centre du cercle O, et construisez le triangle dont les sommets sont (P1,P2,O). Vous connaissez toutes les longueurs des arêtes, vous pouvez donc calculer l'aire du triangle S (voir ici) . Et puisque vous connaissez l'aire, vous connaissez aussi la longueur de la hauteur du triangle, qui est la suite de F1 à O :

S = 0.5*dist(P1,P2)*height

Puis F1 = radius - height et il en va de même pour F2.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X