2D中

时间:2017-05-28 19:38:28

标签: python geometry

我一直在努力解决这个问题:如何获得三角形外接圆的中心和半径(2D)? 到目前为止我做了什么:

I used the 1.5 linear system that is easily computable, however my implementation does not work at all...

我的代码(在python中,为方便起见使用numpy):

def cercle_circonscrit(T):
   A = np.array([[x3-x1,y3-y1],[x3-x2,y3-y2]])
   Y = np.array([(x3**2 + y3**2 - x1**2 - y1**2),(x3**2+y3**2 - x2**2-y2**2)])
   if np.linalg.det(A) == 0:
       return False
   Ainv = np.linalg.inv(A)
   X = 0.5*np.dot(Ainv,Y)
   x,y = X[0],X[1]
   r = sqrt((x-x1)**2+(y-y1)**2)
   return (x,y),r

到目前为止,这会带来莫名其妙的结果......但是我并没有试图证明上述公式,这可能是错误的...... 感谢

1 个答案:

答案 0 :(得分:0)

你可能忘了把(x1,y1)等作为函数的参数。

这应该有效:

import numpy as np
from math import sqrt

def cercle_circonscrit(T):
    (x1, y1), (x2, y2), (x3, y3) = T
    A = np.array([[x3-x1,y3-y1],[x3-x2,y3-y2]])
    Y = np.array([(x3**2 + y3**2 - x1**2 - y1**2),(x3**2+y3**2 - x2**2-y2**2)])
    if np.linalg.det(A) == 0:
        return False
    Ainv = np.linalg.inv(A)
    X = 0.5*np.dot(Ainv,Y)
    x,y = X[0],X[1]
    r = sqrt((x-x1)**2+(y-y1)**2)
    return (x,y),r

T = ((0, 0), (1, 0), (0, 1))
cercle_circonscrit(T)
#--> ((0.5, 0.5), 0.7071067811865476)