Skip to content

Commit 831bc64

Browse files
committed
revision class upoint
1 parent c7df948 commit 831bc64

File tree

2 files changed

+42
-36
lines changed

2 files changed

+42
-36
lines changed

src/greasepad.pro

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@ DEFINES += QT_DEPRECATED_WARNINGS
1919

2020

2121
# set assember's flags (MinGW), syntax: -Wa,<comma-separated list>
22-
# contains(QMAKE_CC, gcc) {
23-
# # MinGW
24-
# QMAKE_CXXFLAGS += -Wa,-mbig-obj
25-
# }
22+
contains(QMAKE_CC, gcc) {
23+
# MinGW
24+
QMAKE_CXXFLAGS += -Wa,-mbig-obj
25+
}
2626

2727

2828
SOURCES += \

src/upoint.cpp

Lines changed: 38 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,10 @@
3232
#include <cmath>
3333
#include <cstdlib>
3434

35+
3536
namespace Uncertain {
3637

37-
//! Construction of uncertain point vai 3-vector x and its covariance matrix
38+
//! Construction of uncertain point via 3-vector x and its covariance matrix
3839
uPoint::uPoint(const Vector3d &x,
3940
const Matrix3d &Sigma_xx)
4041
: BasicEntity2D (x, Sigma_xx)
@@ -49,47 +50,57 @@ uPoint::uPoint(const Vector3d &x,
4950
//! Get axis-aligned bounding box
5051
Aabb uPoint::bbox() const
5152
{
52-
double const uu = v(0);
53-
double const vv = v(1);
54-
double const ww = v(2);
53+
const double uu = v(0);
54+
const double vv = v(1);
55+
const double ww = v(2);
5556
Eigen::Matrix<double,2,3> JJ;
5657
JJ.col(0) << 1/ww, 0;
5758
JJ.col(1) << 0, 1/ww;
5859
JJ.col(2) << -uu/(ww*ww), -vv/(ww*ww);
59-
Eigen::Matrix2d Cov_xx = JJ * Cov() * JJ.transpose();
60+
const Eigen::Matrix2d Cov_xx = JJ * Cov() * JJ.transpose();
6061

61-
double const x = v(0) / v(2);
62-
double const y = v(1) / v(2);
62+
const double x = v(0) / v(2);
63+
const double y = v(1) / v(2);
6364

64-
double const x_min = x - sqrt(Cov_xx(0, 0));
65-
double const x_max = x + sqrt(Cov_xx(0, 0));
66-
double const y_min = y - sqrt(Cov_xx(1, 1));
67-
double const y_max = y + sqrt(Cov_xx(1, 1));
65+
const double x_min = x - sqrt(Cov_xx(0, 0));
66+
const double x_max = x + sqrt(Cov_xx(0, 0));
67+
const double y_min = y - sqrt(Cov_xx(1, 1));
68+
const double y_max = y + sqrt(Cov_xx(1, 1));
6869

6970
return Aabb{ x_min, x_max, y_min, y_max} ;
7071
}
7172

73+
7274
//! Get Euclidean distance to uncertain straight line 'ul'
7375
uDistance uPoint::distanceEuclideanTo( const uStraightLine & ul) const
7476
{
7577
const Vector3d l = ul.v();
7678
const Vector3d x = v();
7779
const double n = l.head(2).norm(); // ||l_h||
78-
const double d = v().dot(l) / (abs( v(2))*n);
80+
const double d_val = v().dot(l) / (abs( v(2))*n);
81+
const double nax2 = n*fabs(x(2));
7982

80-
Vector3d JJx;
81-
Vector3d JJl;
82-
JJx(0) = l(0)/(abs(x(2))*n);
83+
/* JJx(0) = l(0)/(abs(x(2))*n);
8384
JJx(1) = l(1)/(abs(x(2))*n);
8485
JJx(2) = l(2)/(abs(x(2))*n) -x.dot(l)*sign(x(2))/( abs(x(2))*abs(x(2)) *n);
8586
8687
JJl(0) = x(0)/(abs(x(2))*n) -x.dot(l)*l(0) / (abs(x(2)) *n*n*n);
8788
JJl(1) = x(1)/(abs(x(2))*n) -x.dot(l)*l(1) / (abs(x(2)) *n*n*n);
88-
JJl(2) = x(2)/(abs(x(2))*n);
89+
JJl(2) = x(2)/(abs(x(2))*n);*/
90+
91+
Vector3d JJx;
92+
JJx(0) = l(0)/nax2;
93+
JJx(1) = l(1)/nax2;
94+
JJx(2) = (-l(0)*x(0) -l(1)*x(1))/( x(2)*nax2 );
95+
96+
Vector3d JJl;
97+
JJl(0) = ( (-l(0)*l(1)*x(1) -l(0)*l(2)*x(2) +l(1)*l(1)*x(0) ) *fabs(x(2))) / ( x(2)*x(2)*n*n*n);
98+
JJl(1) = ( ( l(0)*l(0)*x(1) -l(0)*l(1)*x(0) -l(1)*l(2)*x(2) ) *fabs(x(2))) / ( x(2)*x(2)*n*n*n);
99+
JJl(2) = x(2)/nax2;
89100

90-
double const var_d = JJx.dot( Cov() * JJx) + JJl.dot(ul.Cov() * JJl);
101+
const double d_var = JJx.dot( Cov() * JJx) + JJl.dot(ul.Cov() * JJl);
91102

92-
return {d,var_d};
103+
return {d_val,d_var};
93104
}
94105

95106
//! Get uncertain point in homogeneous coordinates, Euclidean normalized
@@ -109,9 +120,6 @@ uPoint uPoint::euclidean() const
109120
//! Get uncertain point, transformed via 3x3 transformation matrix
110121
uPoint uPoint::transformed( const Matrix3d & TT) const
111122
{
112-
// uPoint ux(*this);
113-
// ux.transform(TT);
114-
// return ux;
115123
return {TT*v(), TT*Cov()*TT.adjoint() };
116124
}
117125

@@ -120,32 +128,30 @@ uPoint uPoint::transformed( const Matrix3d & TT) const
120128
bool uPoint::isIncidentWith( const uStraightLine & ul,
121129
const double T) const
122130
{
123-
double const d = v().dot(ul.v()); // d = x'*l
124-
double const var_d = ul.v().dot(Cov() * ul.v()) + v().dot( ul.Cov() * v()); // uncorrelated
125-
Q_ASSERT( var_d>0. );
126-
double const T_in = (d * d) / var_d;
131+
const double d_val = v().dot(ul.v()); // d = x'*l
132+
const double d_var = ul.v().dot(Cov() * ul.v()) + v().dot( ul.Cov() * v()); // uncorrelated
133+
Q_ASSERT( d_var>0. );
134+
double const T_in = (d_val * d_val) / d_var;
127135
return (T_in < T);
128136
}
129137

130138
//! Get algebraic distance of 'this' and straight line of 'ul'
131139
uDistance uPoint::distanceAlgebraicTo( const uStraightLine & ul ) const
132140
{
133-
double const d = sign( v(2) ) * v().dot(ul.v());
134-
Vector3d const JJx = ul.v().adjoint();
135-
Vector3d const JJl = sign( v(2) ) * v().adjoint();
141+
const double d_val = sign( v(2) ) * v().dot(ul.v());
142+
const Vector3d JJx = ul.v().adjoint();
143+
const Vector3d JJl = sign( v(2) ) * v().adjoint();
136144
// JJ = [l', sign(x(3))*x'];
137145

138-
double const var_d = JJx.dot( Cov() * JJx) + JJl.dot(ul.Cov() * JJl); // uncorrelated
146+
const double d_var = JJx.dot( Cov() * JJx) + JJl.dot(ul.Cov() * JJl); // uncorrelated
139147

140-
return {d, var_d};
148+
return {d_val, d_var};
141149
}
142150

143151
//! Get uncertain point in homogeneous coordinates, spherically normalized
144152
uPoint uPoint::sphericalNormalized() const
145153
{
146-
// uPoint ux = *this ;
147154
uPoint ux(*this);
148-
//uPoint ux = uPoint(*this);
149155
ux.normalizeSpherical();
150156
return ux; // Compiler invokes the copy constructor.
151157
}

0 commit comments

Comments
 (0)