from Numeric import * from numarray.linear_algebra import * #playing with Numpy and linear_algebra.py #d=array(((0,0),(.5,0),(0,.5))) #print d #e=array(d[1:4]) #print e #e1=e[0,0] #e2=e[0,1] #e3=e[1,0] #e4=e[1,1] #g=array(((e1,e2),(e3,e4))) #print g #h= determinant(g) #note: numarray.linear_algebra is needed to get a determinant #print h #from http://home.att.net/~srschmitt/script_circle_solver.html #Circle solver #From analytic geometry, we know that there is a unique circle that passes through three points if, and only #if, they are not on the same line. Given three points, # {x1, y1}, {x2, y2}, {x3, y3} #points=array(((0,0),(.5,0),(0,.5))) x1=0;y1=.5;x2=0;y2=0;x3=.5;y3=0 # # ^2 = squared #|x^2 + y^2 x y 1| #|x1^2 + y1^2 x1 y1 1| = 0 #|x2^2 + y2^2 x2 y2 1| #|x3^2 + y3^2 x3 y3 1| # - remember, we are solving for x and y - they are in the top row # Evaluating the cofactors for the first row of the determinant can give us a solution. The determinant #equation can be written as an equation of these cofactors: # # (x^2 + y^2)·M11 - x·M12 + y·M13 - M14 = 0 # here is a side note on how to determine Minor determinants: ##################### #from: http://en.wikipedia.org/wiki/Minor_%28linear_algebra%29 #In linear algebra, a minor of a matrix A is the determinant of some smaller square matrix, cut down from A. # For example, given the matrix # | 1 4 7 | # | 3 0 5 | # |-1 9 11| # The minor M23 is the determinant of the above matrix with row 2 and column 3 removed # | 1 4 | | 1 4 | # | | yields |-1 9 | = (9-(-4)) = 13 # |-1 9 | # #################################################################################### # so M11 for the example earlier is the determinant of this matrix: # | x1 y1 1| # | x2 y2 1| # | x3 y3 1| # for points=array(((0,0),(.5,0),(0,.5))) # let's use some variables so that we don't have to type everything, every time: # points= array(((x1,y1),(x2,y2),(x3,y3))) M11_array = array(((x1,y1,1),(x2,y2,1),(x3,y3,1))) # to get the determinant: M11 = determinant(M11_array) # # M12 is the determinant of this matrix: # |x1^2 + y1^2 y1 1| # |x2^2 + y2^2 y2 1| # |x3^2 + y3^2 y3 1| M12_array=array((((x1*x1)+(y1*y1),y1,1),((x2*x2)+(y2*y2),y2,1),((x3*x3)+(y3*y3),y3,1))) M12 = determinant(M12_array) # # M13 is the determinant of this matrix: # |x1^2 + y1^2 x1 1| # |x2^2 + y2^2 x2 1| # |x3^2 + y3^2 x3 1| M13_array=array((((x1*x1)+(y1*y1),x1,1),((x2*x2)+(y2*y2),x2,1),((x3*x3)+(y3*y3),x3,1))) M13 = determinant(M13_array) # M14 is the determinant of this matrix: # |x1^2 + y1^2 x1 y1| # |x2^2 + y2^2 x2 y2| # |x3^2 + y3^2 x3 y3| M14_array=array((((x1*x1)+(y1*y1),x1,y1),((x2*x2)+(y2*y2),x2,y2),((x3*x3)+(y3*y3),x3,y3))) M14 = determinant(M14_array) # # #This can be converted to the canonical form of the equation of a circle: # # x^2 + y^2 - (M12/M11)·x + (M13/M11)·y - M14/M11 = 0 # #Completing the squares in x and y gives: # # x0 = 0.5·M12/M11 # y0 = -0.5·M13/M11 # r0^2 = x0^2 + y0^2 + M14/M11 # #Note that there is no solution when M11 is equal to zero. In this case, the points are not on a circle. # so for python: x_center = .5 * (M12/M11 ) y_center = -.5 * (M13/M11 ) radius = (( x_center **2) + (y_center **2) + (M14/M11))**.5