Справка по геометрии Python - PullRequest
1 голос
/ 16 июня 2010

У меня следующая проблема, я пытаюсь найти следующие расстояния (F1 и F2): круг http://i50.tinypic.com/15xac5d.png

Это то, что у меня сейчас:

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

До тех пор, пока здесь все не работает, каковы будут следующие шаги, чтобы получить F1 и F2?

EDIT: Оба ответа (Tomer и Inerjay), кажется, работают для первого изображения, но я пробовал следующее изображение, и оно больше не работает:

круг 2 http://i45.tinypic.com/20b232b.png

Ответы [ 2 ]

1 голос
/ 16 июня 2010

Если у вас есть радиус круга, вы можете использовать теорему Пифагора, чтобы получить расстояние от центра круга до отрезка P2-P3 (посмотрите на треугольник с его вершинами в: P2, центр круга и серединаР2-Р3).Затем вычтите это из радиуса, чтобы получить F2.Тот же метод, чтобы получить F1.

Редактировать : Если вы называете x расстояние между центром и сегментом P2-P3, то F2 либо R-x (как в первомизображение) или R+x (как на втором изображении).Это зависит от того, как вы определяете F1 и F2.

Если вы определяете F1 и F2 так, чтобы они всегда выходили за пределы треугольника P1-P2-P3 (это соответствует обоим вашим примерам), тогда F2 = R-x, еслиЦентр круга находится на той же стороне P2-P3, что и P1, и F2 = R+x, если P1 и центр круга находятся на противоположных сторонах P2-P3.

0 голосов
/ 16 июня 2010

Если я правильно понимаю, сегменты F1, F2 указывают в направлении к центру.Отметьте центр круга O и постройте треугольник с вершинами (P1, P2, O).Вы знаете все длины ребер, поэтому вы можете рассчитать площадь треугольника S (см. Здесь) .И так как вы знаете область, вы также знаете длину высоты треугольника, которая является продолжением от F1 до O:

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

Затем F1 = radius - height, то же самое относится и к F2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...