Python: 圆形回归求中心和半径
我按照这个教程来计算给定三个点(x, y)坐标的圆心和半径。我写了以下的Python代码,但我得到的h和k值还是矩阵,所以我想知道如何根据那个教程来计算这两个值:
import numpy as np
from math import *
last_point = (2, -4)
second_last_point = (6, -2)
third_last_point = (5, 5)
points = []
points.append(last_point)
points.append(second_last_point)
points.append(third_last_point)
h_numerator = []
h_denominator = []
k_numerator = []
for index in range(len(points)):
current_point = points[index]
h_denominator.append([current_point[0], current_point[1], 1])
h_numerator.append([current_point[0] ** 2 + current_point[1] ** 2, current_point[1], 1])
k_numerator.append([current_point[0], current_point[0] ** 2 + current_point[1] ** 2, 1])
h_numeratorMatrix = np.matrix(np.array(h_numerator))
denominatorMatrix = np.matrix(np.array(h_denominator))
k_numeratorMatrix = np.matrix(np.array(k_numerator))
h = h_numeratorMatrix / (2. * denominatorMatrix)
k = k_numeratorMatrix / (2. * denominatorMatrix)
print 'h=', h
print 'k=', k
1 个回答
1
你在教程中漏掉了一个小细节:
这些最简单的形式涉及到行列式
而你正在尝试对矩阵进行除法(h = h_numeratorMatrix / (2. * denominatorMatrix)
)。所以,计算h
和k
的正确代码应该是这样的:
h = np.linalg.det(h_numeratorMatrix) / (2. * np.linalg.det(denominatorMatrix))
k = np.linalg.det(k_numeratorMatrix) / (2. * np.linalg.det(denominatorMatrix))
附注:
这部分代码
for index in range(len(points)):
current_point = points[index]
可以改成:
for current_point in points:
...