答案 0 :(得分:4)
如果你想找到与所有3个点(我从评论中的提示中得出的结论)相同的点,你基本上都在寻找包含所有三个点的圆心。请注意,存在1或0这样的圆,取决于您的三个点是否共线(即它们是否在一条线上对齐)。
您最简单的选择是查看圆的两个半径,并查看它们的交点。如果你想象一下你知道圆圈的那一刻,你可以很容易地看到你的任何两个点都定义了圆的截面,所以这些割线的垂直平分线将在圆的中心相交。如果点在一条线上对齐,则所有这些平分线将是平行的,即它们不会有交叉点(这是有道理的:一条线是一个半径无限的圆)。
因此,您需要查看点的垂直平分线方程,p1 = [x1,y1]
,p2 = [x2,y2]
和p3 = [x3,y3]
。由前两个点定义的第一个垂直平分线穿过q1 = (p1+p2)/2
,并垂直于n1 = p1-p2
,因此其方向向量为v1 = [y1-y2,x2-x1]
。现在你需要为另一对点做同样的事情:
q2 = (p1+p3)/2;
v2 = [y1-y3,x3-x1];
然后你的两个垂直平分线的点由
定义q1 + t1*v1
q2 + t2*v2
分别带有t1
,t2
个真实参数。您需要做的是解决t1
和t2
,以便两条线在O = [ox,oy]
中相交:
q1 + t1*v1 = q2 + t2*v2
t1*v1 - t2*v2 = q2 - q1
后者是一个二维矢量方程:两个参数t1
和t2
的两个非齐次线性方程。如果你以通常的方式解决它,解决方案[tsol1; tsol2]
的任何一个组件都会给你原点的坐标:
O = q1 + tsol1*v1 == q2 + tsol2*v2
当两个平分线平行并且不通过相同的点(即,您的三个点沿着一条线对齐)时,线性方程将没有确切的解。当两个平分线重合时(即如果两个点重合),线性方程将是微不足道的并且具有无限多个解。
在非退化情况下,方程式应该有一个唯一的解决方案,您可以从中得出圆的中心。
答案 1 :(得分:1)
如果您正在寻找距离三个点的距离相等的点,则可以创建相应的符号方程并求解它们。我们将这些点分为P2 = [0.5 1]
,P3 = [0.5 1.5]
和syms x y
% [x, y] has equal distance from P1 and P2:
eqn1 = (P1(1)-x).^2 + (P1(2)-y).^2 == (P2(1)-x).^2 + (P2(2)-y).^2;
% [x, y] has equal distance from P1 and P3:
eqn2 = (P1(1)-x).^2 + (P1(2)-y).^2 == (P3(1)-x).^2 + (P3(2)-y).^2;
[a, b] = solve([eqn1, eqn2], [x, y])
% a =
%
% 9/4
%
%
% b =
%
% 5/4
。
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
通常,如果处理大量数据,使用符号变量和方程式并不是一个合理的选择。否则,便于以紧凑和简单的方式编写数学。