计算与Matlab中三个特定点相等的点

时间:2016-10-16 22:18:36

标签: matlab geometry distance

我有这个简单的数据集:

Class1 = [1 0; 0.5 1; 0.5 1.5];

如何在数据集的所有三个点上找到与欧氏距离相等的2d空间上的点?

enter image description here

以橙色突出显示的点应大致为计算点所在的位置。

2 个答案:

答案 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

分别带有t1t2个真实参数。您需要做的是解决t1t2,以便两条线在O = [ox,oy]中相交:

q1 + t1*v1 = q2 + t2*v2
t1*v1 - t2*v2 = q2 - q1

后者是一个二维矢量方程:两个参数t1t2的两个非齐次线性方程。如果你以通常的方式解决它,解决方案[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{

通常,如果处理大量数据,使用符号变量和方程式并不是一个合理的选择。否则,便于以紧凑和简单的方式编写数学。