def circleby2ptsradius(pt1Vec, pt2Vec, radius):
if radius < la.norm(pt1Vec-pt2Vec)/2:
centerVec1 = np.array(['NaN', 'NaN'])
centerVec2 = np.array(['NaN', 'NaN'])
else:
a = pt1Vec[0]**2-pt2Vec[0]**2
b = pt1Vec[1]**2-pt2Vec[1]**2
c = -2*(pt1Vec[0]-pt2Vec[0])
d = -2*(pt1Vec[1]-pt2Vec[1])
e = a+b
Coeff1 = 1+(d/c)**2
Coeff2 = ((2*d*e/c**2) +(pt2Vec[0]*2*d/c) -2*pt2Vec[1])
Coeff3 = ((e/c)**2+(2*pt2Vec[0]*e/c)+pt2Vec[0]**2+pt2Vec[1]**2-\
radius**2)
All_coeff = np.array([Coeff1, Coeff2, Coeff3])
Eq_root = np.roots(All_coeff)
# centersArray--center of the circle. It is a 2x2 matrix. First row
# represents first possible center (x1, y1) and second row is the
# second possible center.
centersArray = np.zeros((len(Eq_root),2))
for i in list(range(len(Eq_root))):
x = -(e+d*Eq_root[i])/c
centersArray[i,0] = x
centersArray[i,1] = Eq_root[i]
# Check if values in centerArray are real or unreal numbers
if la.norm(centersArray.imag) != 0:
print('Circle with the specified radius does not pass through',
'specified points', sep=" ")
centerVec1 = np.array(['NaN', 'NaN'])
centerVec2 = np.array(['NaN', 'NaN'])
else:
centerVec1 = centersArray[0, :]
centerVec2 = centersArray[1, :]
return centerVec1, centerVec2
评论列表
文章目录