@@ -1432,36 +1432,37 @@ std::pair<VectorXd, VectorXd> impl::trackCoords(const QPolygonF &poly)
14321432
14331433
14341434
1435- std::pair<uPoint,uPoint> impl::uEndPoints (const VectorXd &xi,
1436- const VectorXd &yi)
1435+ // ! uncertain end-points by projection of the extrem points onto the straight line
1436+ std::pair<uPoint,uPoint>
1437+ impl::uEndPoints (const VectorXd & xi, const VectorXd & yi)
14371438{
14381439 assert ( xi.size () > 0 );
14391440 assert ( yi.size () == xi.size () );
14401441
1441- const uStraightLine l = uStraightLine::estim (xi,yi);
1442- const double phi = l.angle_rad ();
1443- const VectorXd zi = sin (phi)*xi -cos (phi)*yi;
1442+ // (1) uncertain straight line
1443+ const uStraightLine ul = uStraightLine::estim (xi,yi);
1444+
1445+ // (2) end-points with isotropic uncertrainty
1446+ const double phi = ul.angle_rad ();
1447+ const VectorXd zi = std::sin (phi)*xi -std::cos (phi)*yi;
1448+
1449+ static const Matrix3d Zeros = Matrix3d::Zero (3 ,3 );
14441450
14451451 int argmin = 0 ;
14461452 zi.minCoeff ( &argmin);
1447- const Vector3d x1 (xi (argmin), yi (argmin), 1 );
1453+ const Vector3d x ( xi (argmin), yi (argmin), 1 );
1454+ const uDistance udx = uPoint (x, Zeros).distanceEuclideanTo (ul);
1455+ const Matrix3d Sigma_xx = Vector3d ( udx.var_d (), udx.var_d (), 0 ).asDiagonal ();
1456+ const uPoint ux = ul.project (uPoint (x, Sigma_xx));
14481457
14491458 int argmax = 0 ;
14501459 zi.maxCoeff ( &argmax);
1451- const Vector3d x2 (xi (argmax), yi (argmax), 1 );
1452-
1453- const Matrix3d Zeros = Matrix3d::Zero (3 ,3 );
1454-
1455- const uDistance ud1 = uPoint (x1, Zeros).distanceEuclideanTo (l);
1456- const Matrix3d Cov1_xx = Vector3d ( ud1.var_d (), ud1.var_d (), 0 ).asDiagonal (); // isotropic
1457-
1458- const uDistance ud2 = uPoint (x2, Zeros).distanceEuclideanTo (l);
1459- const Matrix3d Cov2_xx = Vector3d ( ud2.var_d (), ud2.var_d (), 0 .).asDiagonal ();
1460-
1461- const uPoint first_ = l.project (uPoint (x1, Cov1_xx));
1462- const uPoint second_ = l.project (uPoint (x2, Cov2_xx));
1460+ const Vector3d y ( xi (argmax), yi (argmax), 1 );
1461+ const uDistance udy = uPoint (y, Zeros).distanceEuclideanTo (ul);
1462+ const Matrix3d Sigma_yy = Vector3d ( udy.var_d (), udy.var_d (), 0 .).asDiagonal ();
1463+ const uPoint uy = ul.project (uPoint (y, Sigma_yy));
14631464
1464- return { first_, second_ };
1465+ return {ux, uy };
14651466}
14661467
14671468
0 commit comments