2017-05-28 74 views
0

我一直在努力:如何获得三角形外接圆的中心和半径(2D)? 我迄今所做的: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 

到目前为止返回莫名的结果...但是我没有尝试证明上面的公式,这可能是错误的... 谢谢

+0

哪里有变量x1,X2,X3,等来的?它们应该是函数的参数或从参数中提取。 – lukess

回答

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

谢谢!我确实把它们放在了我的代码中(我在这里做了一个错误的代码复制代码,而且我认为在代码中实际获取x1,y1等代码时也犯了一个错误,因为代码完美无缺)。 –