Skip to content

Commit 0e71b95

Browse files
committed
revision method uEndPoints
1 parent 5812c93 commit 0e71b95

File tree

1 file changed

+20
-19
lines changed

1 file changed

+20
-19
lines changed

src/state.cpp

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)