从一组坐标中精确地计算出中心点的三角测量方法。

4

如何从一组坐标中计算出准确的中心点?

例如,从以下观测数据中:

point   xcoord  ycoord  accuracy    time
1       x1      y1      2000        t1
2       x2      y2      2000        t2
3       x3      y3      2000        t3
n       xn      yn      2000        tn

技术上讲,这些点都是半径为其精度的圆形的中心点,我们知道我们至少在一个圆形内。
我想计算圆形相交区域的中心点和精度。
这里有一个简单的例子。绿线试图表示准确性。
1个回答

2

+1 非常有趣的问题... 这是我的 C++ 实现方法。

用全局表和变量存储所有需要的数据:

const int    N=5;       // number of measurement circles
struct _circle { double x,y,r; _circle() { x=0; y=0; r=0.0; } } circle[N],circle0,circle1;
  • circle[] - 测量位置
  • circle0 - 原始真实位置(对您来说未知)
  • circle1 - 计算得出的更精确位置

这是我的随机测量值(将您的测量值复制到此处):

int i;
double r,a,x0,x1,y0,y1;
// set real position
circle0.x=50.0;
circle0.y=50.0;
circle0.r=25.0;
// set meassured positions
Randomize();
for (i=0;i<N;i++)
    {
    r=circle0.r*(0.2+(0.3*double(Random(101))*0.01));
    a= 2.0*M_PI*          double(Random(101))*0.01;
    circle[i]=circle0;
    circle[i].x+=r*cos(a);
    circle[i].y+=r*sin(a);
    }

这是如何计算平均样式位置的方法:

// compute more accurate position (average style)
circle1.x=0.0;
circle1.y=0.0;
circle1.r=circle0.r;
for (i=0;i<N;i++)
    {
    circle1.x+=circle[i].x;
    circle1.y+=circle[i].y;
    }
circle1.x/=N;
circle1.y/=N;
for (i=0;i<N;i++)
    {
    r=circle1.x-circle[i].x; r*=r;
    a=circle1.y-circle[i].y; a*=a;
    r=circle[i].r-sqrt(a+r);
//  if (circle1.r>r) circle1.r=r;   // best accuracy
    if (circle1.r<r) circle1.r=r;   // worse accuracy
    }
  • 在最后两个if语句中选择您想要的精度半径...
  • 位置是基于所有测量值的平均值

以下是计算几何样式位置的方法:

// compute more accurate position (geometry style)
x0=circle[i].x; x1=x0;
y0=circle[i].y; y1=y0;
for (i=0;i<N;i++)
    {
    a=circle[i].x; if (x0>a) x0=a; if (x1<a) x1=a;
    a=circle[i].y; if (y0>a) y0=a; if (y1<a) y1=a;
    }
circle1.x=0.5*(x0+x1); x1-=x0; x1*=x1;
circle1.y=0.5*(y0+y1); y1-=y0; y1*=y1;
circle1.r=1.0*sqrt(x1+y1);
  • position是占用区域的中心

以下是一些代码输出的预览:

accuracy overlap


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接