2013-10-11 2 views
3

Как вычислить центральную точку из набора координат с точностью?центральная точка треугольника с точностью от множества координат

, например, из набора наблюдений:

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 

Techically все эти точки centerpoints для окружностей с радиусом их точности, и мы знаем, что мы находимся в по крайней мере один круг на время.

Я хотел бы рассчитать центральную точку и точность для пересекающихся областей кругов.

Вот грубый пример. Зеленая линия пытается представить точность crude example picture

ответ

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 
    } 
  • выбрал нужный радиус точности в двух последних случаях ...
  • po sition основана на среднем значении всех измеренных

Это как вычислить геометрии с позиции стиля:

// 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); 
  • положение центра занимаемой площади

А вот некоторые предварительные просмотры моего кода:

accuracy overlap

Смежные вопросы