Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
O
ogs
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Dmitri Naumov
ogs
Commits
663fc70e
Commit
663fc70e
authored
4 years ago
by
Tom Fischer
Browse files
Options
Downloads
Patches
Plain Diff
[GL/MaL] Use scalarTriple Eigen version.
parent
fa3f56a1
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
GeoLib/AnalyticalGeometry.cpp
+18
-12
18 additions, 12 deletions
GeoLib/AnalyticalGeometry.cpp
GeoLib/MinimalBoundingSphere.cpp
+14
-2
14 additions, 2 deletions
GeoLib/MinimalBoundingSphere.cpp
MathLib/GeometricBasics.cpp
+16
-7
16 additions, 7 deletions
MathLib/GeometricBasics.cpp
with
48 additions
and
21 deletions
GeoLib/AnalyticalGeometry.cpp
+
18
−
12
View file @
663fc70e
...
...
@@ -288,31 +288,37 @@ std::unique_ptr<GeoLib::Point> triangleLineIntersection(
MathLib
::
Point3d
const
&
c
,
MathLib
::
Point3d
const
&
p
,
MathLib
::
Point3d
const
&
q
)
{
const
MathLib
::
Vector3
pq
(
p
,
q
);
const
MathLib
::
Vector3
pa
(
p
,
a
);
const
MathLib
::
Vector3
pb
(
p
,
b
);
const
MathLib
::
Vector3
pc
(
p
,
c
);
double
u
(
MathLib
::
scalarTriple
(
pq
,
pc
,
pb
));
auto
const
va
=
Eigen
::
Map
<
Eigen
::
Vector3d
const
>
(
a
.
getCoords
());
auto
const
vb
=
Eigen
::
Map
<
Eigen
::
Vector3d
const
>
(
b
.
getCoords
());
auto
const
vc
=
Eigen
::
Map
<
Eigen
::
Vector3d
const
>
(
c
.
getCoords
());
auto
const
vp
=
Eigen
::
Map
<
Eigen
::
Vector3d
const
>
(
p
.
getCoords
());
auto
const
vq
=
Eigen
::
Map
<
Eigen
::
Vector3d
const
>
(
q
.
getCoords
());
Eigen
::
Vector3d
const
pq
=
vq
-
vp
;
Eigen
::
Vector3d
const
pa
=
va
-
vp
;
Eigen
::
Vector3d
const
pb
=
vb
-
vp
;
Eigen
::
Vector3d
const
pc
=
vc
-
vp
;
double
u
(
MathLib
::
scalarTriple
(
pq
,
pc
,
pb
));
if
(
u
<
0
)
{
return
nullptr
;
}
double
v
(
MathLib
::
scalarTriple
(
pq
,
pa
,
pc
));
double
v
(
MathLib
::
scalarTriple
(
pq
,
pa
,
pc
));
if
(
v
<
0
)
{
return
nullptr
;
}
double
w
(
MathLib
::
scalarTriple
(
pq
,
pb
,
pa
));
double
w
(
MathLib
::
scalarTriple
(
pq
,
pb
,
pa
));
if
(
w
<
0
)
{
return
nullptr
;
}
const
double
denom
(
1.0
/
(
u
+
v
+
w
));
u
*=
denom
;
v
*=
denom
;
w
*=
denom
;
const
double
denom
(
1.0
/
(
u
+
v
+
w
));
u
*=
denom
;
v
*=
denom
;
w
*=
denom
;
return
std
::
make_unique
<
GeoLib
::
Point
>
(
u
*
a
[
0
]
+
v
*
b
[
0
]
+
w
*
c
[
0
],
u
*
a
[
1
]
+
v
*
b
[
1
]
+
w
*
c
[
1
],
u
*
a
[
2
]
+
v
*
b
[
2
]
+
w
*
c
[
2
]);
...
...
This diff is collapsed.
Click to expand it.
GeoLib/MinimalBoundingSphere.cpp
+
14
−
2
View file @
663fc70e
...
...
@@ -18,7 +18,7 @@
#include
"MathLib/Point3d.h"
#include
"MathLib/GeometricBasics.h"
#include
"MathLib/
Vector3
.h"
#include
"MathLib/
MathTools
.h"
namespace
GeoLib
{
MinimalBoundingSphere
::
MinimalBoundingSphere
()
=
default
;
...
...
@@ -81,13 +81,25 @@ MinimalBoundingSphere::MinimalBoundingSphere(MathLib::Point3d const& p,
MathLib
::
Point3d
const
&
r
,
MathLib
::
Point3d
const
&
s
)
{
auto
const
vp
=
Eigen
::
Map
<
Eigen
::
Vector3d
>
(
const_cast
<
double
*>
(
p
.
getCoords
()));
auto
const
vq
=
Eigen
::
Map
<
Eigen
::
Vector3d
>
(
const_cast
<
double
*>
(
q
.
getCoords
()));
auto
const
vr
=
Eigen
::
Map
<
Eigen
::
Vector3d
>
(
const_cast
<
double
*>
(
r
.
getCoords
()));
auto
const
vs
=
Eigen
::
Map
<
Eigen
::
Vector3d
>
(
const_cast
<
double
*>
(
s
.
getCoords
()));
Eigen
::
Vector3d
const
va
=
vq
-
vp
;
Eigen
::
Vector3d
const
vb
=
vr
-
vp
;
Eigen
::
Vector3d
const
vc
=
vs
-
vp
;
MathLib
::
Vector3
const
a
(
p
,
q
);
MathLib
::
Vector3
const
b
(
p
,
r
);
MathLib
::
Vector3
const
c
(
p
,
s
);
if
(
!
MathLib
::
isCoplanar
(
p
,
q
,
r
,
s
))
{
double
const
denom
=
2.0
*
MathLib
::
scalarTriple
(
a
,
b
,
c
);
double
const
denom
=
2.0
*
MathLib
::
scalarTriple
(
v
a
,
vb
,
v
c
);
MathLib
::
Vector3
const
o
=
(
scalarProduct
(
c
,
c
)
*
crossProduct
(
a
,
b
)
+
scalarProduct
(
b
,
b
)
*
crossProduct
(
c
,
a
)
+
scalarProduct
(
a
,
a
)
*
crossProduct
(
b
,
c
))
...
...
This diff is collapsed.
Click to expand it.
MathLib/GeometricBasics.cpp
+
16
−
7
View file @
663fc70e
...
...
@@ -23,10 +23,15 @@ double orientation3d(MathLib::Point3d const& p,
MathLib
::
Point3d
const
&
b
,
MathLib
::
Point3d
const
&
c
)
{
MathLib
::
Vector3
const
ap
(
a
,
p
);
MathLib
::
Vector3
const
bp
(
b
,
p
);
MathLib
::
Vector3
const
cp
(
c
,
p
);
return
MathLib
::
scalarTriple
(
bp
,
cp
,
ap
);
auto
const
pp
=
Eigen
::
Map
<
Eigen
::
Vector3d
const
>
(
p
.
getCoords
());
auto
const
pa
=
Eigen
::
Map
<
Eigen
::
Vector3d
const
>
(
a
.
getCoords
());
auto
const
pb
=
Eigen
::
Map
<
Eigen
::
Vector3d
const
>
(
b
.
getCoords
());
auto
const
pc
=
Eigen
::
Map
<
Eigen
::
Vector3d
const
>
(
c
.
getCoords
());
Eigen
::
Vector3d
const
ap
=
pp
-
pa
;
Eigen
::
Vector3d
const
bp
=
pp
-
pb
;
Eigen
::
Vector3d
const
cp
=
pp
-
pc
;
return
MathLib
::
scalarTriple
(
bp
,
cp
,
ap
);
}
double
calcTetrahedronVolume
(
MathLib
::
Point3d
const
&
a
,
...
...
@@ -34,9 +39,13 @@ double calcTetrahedronVolume(MathLib::Point3d const& a,
MathLib
::
Point3d
const
&
c
,
MathLib
::
Point3d
const
&
d
)
{
const
MathLib
::
Vector3
ab
(
a
,
b
);
const
MathLib
::
Vector3
ac
(
a
,
c
);
const
MathLib
::
Vector3
ad
(
a
,
d
);
auto
const
va
=
Eigen
::
Map
<
Eigen
::
Vector3d
const
>
(
a
.
getCoords
());
auto
const
vb
=
Eigen
::
Map
<
Eigen
::
Vector3d
const
>
(
b
.
getCoords
());
auto
const
vc
=
Eigen
::
Map
<
Eigen
::
Vector3d
const
>
(
c
.
getCoords
());
auto
const
vd
=
Eigen
::
Map
<
Eigen
::
Vector3d
const
>
(
d
.
getCoords
());
Eigen
::
Vector3d
const
ab
=
vb
-
va
;
Eigen
::
Vector3d
const
ac
=
vc
-
va
;
Eigen
::
Vector3d
const
ad
=
vd
-
va
;
return
std
::
abs
(
MathLib
::
scalarTriple
(
ac
,
ad
,
ab
))
/
6.0
;
}
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment