Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
X
x3domlet
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
3
Issues
3
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Elphel
x3domlet
Commits
1594de3f
Commit
1594de3f
authored
Nov 12, 2018
by
Oleg Dzhimiev
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
combined ellipse matched
parent
3ece274b
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
88 additions
and
172 deletions
+88
-172
x3dom_deltas.js
js/x3dom_deltas.js
+88
-172
No files found.
js/x3dom_deltas.js
View file @
1594de3f
...
...
@@ -30,9 +30,19 @@ function x3dom_delta_markers(){
// just a coefficient
var
e2_k
=
1
/
2
;
var
e2_abc
=
[
e2_k
*
1
,
e2_k
*
30
,
e2_k
*
1
];
var
e2_scale
=
e2_abc
.
join
(
","
);
//
var e2_scale = e2_abc.join(",");
//x3dom_draw_ellipsoid("e2","green",e2_c.toString(),"",e2_scale);
x3dom_draw_ellipsoid_by_semiaxes_and_center
(
"e2"
,
"green"
,{
O
:
e2_c
,
Ox
:
new
x3dom
.
fields
.
SFVec3f
(
e2_abc
[
0
],
0
,
0
),
Oy
:
new
x3dom
.
fields
.
SFVec3f
(
0
,
e2_abc
[
1
],
0
),
Oz
:
new
x3dom
.
fields
.
SFVec3f
(
0
,
0
,
e2_abc
[
2
])
},
0.0
);
var
RE2
=
x3dom
.
fields
.
SFMatrix4f
.
identity
();
//RE2.setValue(xa,ya,za);
// draw ellipsoid axes
//var xa = new x3dom.fields.SFVec3f(1,0,0);
//var ya = new x3dom.fields.SFVec3f(0,1,0);
...
...
@@ -62,8 +72,8 @@ function x3dom_delta_markers(){
var
e1_d
=
x3dom_3d_distance
(
e1_c
.
x
,
e1_c
.
y
,
e1_c
.
z
,
false
);
var
e1_k
=
20
;
var
e1_abc
=
[
e1_k
*
0.00038
*
e1_d
,
e1_k
*
0.00038
*
e1_d
,
2
*
e1_k
*
e1_d
*
e1_d
/
10000
];
var
e1_scale
=
e1_abc
.
join
(
","
);
console
.
log
(
"e1
scale: "
+
e1_scale
);
console
.
log
(
"e1
abc: "
+
e1_abc
.
join
(
" "
)
);
// draw ellipsoid axes
var
e1_dir
=
e1_c
;
...
...
@@ -73,13 +83,15 @@ function x3dom_delta_markers(){
var
ya
=
xa
.
cross
(
e1_dir
);
var
za
=
e1_dir
.
negate
();
x3dom_draw_line
(
"xa"
,
"red"
,
e2_c
,
e2_c
.
add
(
xa
.
multiply
(
e1_abc
[
0
])));
x3dom_draw_line
(
"ya"
,
"green"
,
e2_c
,
e2_c
.
add
(
ya
.
multiply
(
e1_abc
[
1
])));
x3dom_draw_line
(
"za"
,
"blue"
,
e2_c
,
e2_c
.
add
(
za
.
multiply
(
e1_abc
[
2
])));
// need to normalize?
/*
xa = xa.normalize();
ya = ya.normalize();
za = za.normalize();
*/
//console.log(xa.toString());
//console.log(ya.toString());
//console.log(za.toString());
var
R0
=
Data
.
camera
.
Matrices
.
R0
;
var
R0i
=
R0
.
inverse
();
// next construct rotation matrix
var
RE1
=
x3dom
.
fields
.
SFMatrix4f
.
identity
();
...
...
@@ -87,204 +99,97 @@ function x3dom_delta_markers(){
console
.
log
(
RE1
.
toString
());
var
translation
=
new
x3dom
.
fields
.
SFVec3f
(
0
,
0
,
0
);
var
scaleFactor
=
new
x3dom
.
fields
.
SFVec3f
(
1
,
1
,
1
);
var
rotation
=
new
x3dom
.
fields
.
Quaternion
(
0
,
0
,
1
,
0
);
var
scaleOrientation
=
new
x3dom
.
fields
.
Quaternion
(
0
,
0
,
1
,
0
);
RE1
.
getTransform
(
translation
,
rotation
,
scaleFactor
,
scaleOrientation
);
x3dom_draw_ellipsoid_by_semiaxes_and_center
(
"e1b"
,
"green"
,{
O
:
e2_c
,
Ox
:
xa
.
multiply
(
e1_abc
[
0
]),
Oy
:
ya
.
multiply
(
e1_abc
[
1
]),
Oz
:
za
.
multiply
(
e1_abc
[
2
])
},
0.0
);
var
q
=
rotation
.
toAxisAngle
();
var
q_str
=
q
[
0
].
toString
()
+
" "
+
q
[
1
];
// now let's get to covariance matrix
var
JE1
=
x3dom_ellipsoid_inertia_tensor_v2
(
1
,
e1_abc
[
0
],
e1_abc
[
1
],
e1_abc
[
2
]);
var
RE1xJE1
=
RE1
.
mult
(
JE1
);
x3dom_draw_ellipsoid
(
"e1b"
,
"green"
,
e2_c
,
q_str
,
e1_scale
);
var
JE2
=
x3dom_ellipsoid_inertia_tensor_v2
(
1
,
e2_abc
[
0
],
e2_abc
[
1
],
e2_abc
[
2
]);
var
RE2xJE2
=
RE2
.
mult
(
JE2
);
// now let's get to covariance matrix
var
JE1
=
x3dom_ellipsoid_inertia_tensor
(
1
,
e1_abc
[
0
],
e1_abc
[
1
],
e1_abc
[
2
]);
var
RE1i
=
RE1
.
inverse
();
var
RE1iJE1
=
RE1i
.
mult
(
JE1
);
var
C1
=
RE1xJE1
.
mult
(
RE1xJE1
.
transpose
());
var
C2
=
RE2xJE2
.
mult
(
RE2xJE2
.
transpose
());
var
C
=
RE1iJE1
.
mult
(
RE1iJE1
.
transpose
()
);
var
C
=
C1
.
add
(
C2
);
Cn
=
matrix_x3dom_to_numeric
(
C
);
Bn
=
numeric
.
eig
(
Cn
);
console
.
log
(
Bn
);
var
m
=
1
/
5
;
var
jxx
=
Math
.
sqrt
(
Bn
.
lambda
.
x
[
0
]);
var
jyy
=
Math
.
sqrt
(
Bn
.
lambda
.
x
[
1
]);
var
jzz
=
Math
.
sqrt
(
Bn
.
lambda
.
x
[
2
]);
var
ee_a
=
Math
.
sqrt
(
1
/
2
/
m
*
(
jyy
+
jzz
-
jxx
));
var
ee_b
=
Math
.
sqrt
(
1
/
2
/
m
*
(
jxx
+
jzz
-
jyy
));
var
ee_c
=
Math
.
sqrt
(
1
/
2
/
m
*
(
jxx
+
jyy
-
jzz
));
var
ee_a
=
Math
.
sqrt
(
Bn
.
lambda
.
x
[
0
]);
var
ee_b
=
Math
.
sqrt
(
Bn
.
lambda
.
x
[
1
]);
var
ee_c
=
Math
.
sqrt
(
Bn
.
lambda
.
x
[
2
]);
console
.
log
(
"e1 restored
scale
: "
+
[
ee_a
,
ee_b
,
ee_c
].
join
(
" "
));
console
.
log
(
"e1 restored
abc
: "
+
[
ee_a
,
ee_b
,
ee_c
].
join
(
" "
));
var
RE1n
=
new
x3dom
.
fields
.
SFMatrix4f
(
Bn
.
E
.
x
[
0
][
0
],
Bn
.
E
.
x
[
1
][
0
],
Bn
.
E
.
x
[
2
][
0
],
0
,
Bn
.
E
.
x
[
0
][
1
],
Bn
.
E
.
x
[
1
][
1
],
Bn
.
E
.
x
[
2
][
1
],
0
,
Bn
.
E
.
x
[
0
][
2
],
Bn
.
E
.
x
[
1
][
2
],
Bn
.
E
.
x
[
2
][
2
],
0
,
Bn
.
E
.
x
[
0
][
0
],
Bn
.
E
.
x
[
0
][
1
],
Bn
.
E
.
x
[
0
][
2
],
0
,
Bn
.
E
.
x
[
1
][
0
],
Bn
.
E
.
x
[
1
][
1
],
Bn
.
E
.
x
[
1
][
2
],
0
,
Bn
.
E
.
x
[
2
][
0
],
Bn
.
E
.
x
[
2
][
1
],
Bn
.
E
.
x
[
2
][
2
],
0
,
0
,
0
,
0
,
1
);
console
.
log
(
RE1n
.
toString
());
return
0
;
//$(".my-markers").find("material").attr("transparency","0.5");
//$("#deltalink").remove();
var
coords
=
[
"0 0 0"
,
p_w
.
x
+
" "
+
p_w
.
y
+
" "
+
p_w
.
z
,
marker
.
x
+
" "
+
marker
.
y
+
" "
+
marker
.
z
,
"0 0 0"
,
].
join
(
" "
);
x3dom_draw_ellipsoid_by_semiaxes_and_center
(
"e1c"
,
"red"
,{
O
:
e2_c
,
Ox
:
RE1n
.
e0
().
multiply
(
ee_a
),
Oy
:
RE1n
.
e1
().
multiply
(
ee_b
),
Oz
:
RE1n
.
e2
().
multiply
(
ee_c
)
},
0.5
);
var
html
=
[
'<group id="deltalink" class="deltalink">'
,
' <switch whichChoice="0">'
,
' <transform>'
,
' <shape>'
,
' <appearance>'
,
' <material emissiveColor="white" transparency="0.0"></material>'
,
' </appearance>'
,
' <lineset vertexCount="4" solid="true" ccw="true" lit="true">'
,
' <coordinate point="'
+
coords
+
'"></coordinate>'
,
' </lineset>'
,
' </shape>'
,
' </transform>'
,
' </switch>'
,
'</group>'
].
join
(
'
\
n'
);
var
sphere_element
=
$
(
html
);
$
(
'scene'
,
Scene
.
element
).
append
(
sphere_element
);
return
0
;
//var d = x3dom_3d_distance(p_w.x,p_w.y,p_w.z,false);
var
d
=
x3dom_3d_distance
(
marker
.
x
,
marker
.
y
,
marker
.
z
,
false
);
//console.log("Distance to pointe is "+d);
}
// z-axis
var
mark_dir
=
new
x3dom
.
fields
.
SFVec3f
(
marker
.
x
,
marker
.
y
,
marker
.
z
);
mark_dir
=
mark_dir
.
normalize
();
/*
e is an object
{
O: x3dom.fields.SFVec3f()
Ox: x3dom.fields.SFVec3f()
Oy: x3dom.fields.SFVec3f()
Oz: x3dom.fields.SFVec3f()
}
*/
function
x3dom_draw_ellipsoid_by_semiaxes_and_center
(
id
,
color
,
e
,
transparency
=
0.5
){
var
world_y
=
new
x3dom
.
fields
.
SFVec3f
(
0
,
1
,
0
);
var
transl
=
e
.
O
.
toString
();
var
scale
=
[
e
.
Ox
.
length
(),
e
.
Oy
.
length
(),
e
.
Oz
.
length
()].
join
(
" "
);
var
mark_x
=
mark_dir
.
cross
(
world_y
);
var
mark_y
=
mark_x
.
cross
(
mark_dir
);
var
mark_z
=
mark_dir
.
negat
e
();
var
xa
=
e
.
Ox
.
normalize
(
);
var
ya
=
e
.
Oy
.
normalize
(
);
var
za
=
e
.
Oz
.
normaliz
e
();
var
M
=
x3dom
.
fields
.
SFMatrix4f
.
lookAt
(
new
x3dom
.
fields
.
SFVec3f
(
0
,
0
,
0
),
mark_dir
,
mark_y
);
var
R
=
x3dom
.
fields
.
SFMatrix4f
.
identity
();
R
.
setValue
(
xa
,
ya
,
za
);
var
translation
=
new
x3dom
.
fields
.
SFVec3f
(
0
,
0
,
0
);
var
scaleFactor
=
new
x3dom
.
fields
.
SFVec3f
(
1
,
1
,
1
);
var
rotation
=
new
x3dom
.
fields
.
Quaternion
(
0
,
0
,
1
,
0
);
var
scaleOrientation
=
new
x3dom
.
fields
.
Quaternion
(
0
,
0
,
1
,
0
);
M
.
getTransform
(
translation
,
rotation
,
scaleFactor
,
scaleOrientation
);
console
.
log
(
"Rotation matrix"
);
console
.
log
(
M
.
toString
());
// draw vectors?!
var
aa
=
rotation
.
toAxisAngle
();
var
aa_string
=
aa
[
0
].
toString
()
+
" "
+
aa
[
1
];
//
// now draw the 1st ellipse
//
mark_dir
=
new
x3dom
.
fields
.
SFVec3f
(
marker
.
x
,
marker
.
y
,
marker
.
z
);
var
k
=
20
;
var
e1_abc
=
[
k
*
0.00038
*
d
,
k
*
0.00038
*
d
,
2
*
k
*
d
*
d
/
10000
];
var
model_scale
=
e1_abc
.
join
(
","
);
// at marker
//x3dom_draw_ellipsoid("e2a","gold",mark_dir.toString(),aa_string,model_scale);
// overlayed
//x3dom_draw_ellipsoid("e1b","green",transl,aa_string,model_scale);
// now Covariance
// E1 (model, tilted):
var
J1
=
x3dom_ellipsoid_inertia_tensor
(
1
,
e1_abc
[
0
],
e1_abc
[
1
],
e1_abc
[
2
]);
var
R1
=
M
;
var
R1i
=
R1
.
inverse
();
var
R1iJ1
=
R1i
.
mult
(
J1
);
// E2 (map, vertical):
var
J2
=
x3dom_ellipsoid_inertia_tensor
(
1
,
e2_abc
[
0
],
e2_abc
[
1
],
e2_abc
[
2
]);
var
R2
=
new
x3dom
.
fields
.
SFMatrix4f
(
1
,
0
,
0
,
0
,
0
,
1
,
0
,
0
,
0
,
0
,
1
,
0
,
0
,
0
,
0
,
1
);
var
R2i
=
R2
.
inverse
();
var
R2iJ2
=
R2i
.
mult
(
J2
);
var
C
=
R1iJ1
.
mult
(
R1iJ1
.
transpose
());
//var C = R2iJ2.mult(R2iJ2.transpose());
//C = C.add(R2iJ2.mult(R2iJ2.transpose()));
Cnum
=
matrix_x3dom_to_numeric
(
C
);
Bnum
=
numeric
.
eig
(
Cnum
);
var
point
=
new
x3dom
.
fields
.
SFVec3f
(
p_w
.
x
,
p_w
.
y
,
p_w
.
z
);
var
RNEW
=
new
x3dom
.
fields
.
SFMatrix4f
(
Bnum
.
E
.
x
[
0
][
0
],
Bnum
.
E
.
x
[
1
][
0
],
Bnum
.
E
.
x
[
2
][
0
],
0
,
Bnum
.
E
.
x
[
0
][
1
],
Bnum
.
E
.
x
[
1
][
1
],
Bnum
.
E
.
x
[
2
][
1
],
0
,
Bnum
.
E
.
x
[
0
][
2
],
Bnum
.
E
.
x
[
1
][
2
],
Bnum
.
E
.
x
[
2
][
2
],
0
,
0
,
0
,
0
,
1
);
console
.
log
(
"R new"
);
console
.
log
(
Rnew
.
toString
());
var
xnew
=
new
x3dom
.
fields
.
SFVec3f
(
Bnum
.
E
.
x
[
0
][
0
],
Bnum
.
E
.
x
[
1
][
0
],
Bnum
.
E
.
x
[
2
][
0
]);
var
ynew
=
new
x3dom
.
fields
.
SFVec3f
(
Bnum
.
E
.
x
[
0
][
1
],
Bnum
.
E
.
x
[
1
][
1
],
Bnum
.
E
.
x
[
2
][
1
]);
var
znew
=
new
x3dom
.
fields
.
SFVec3f
(
Bnum
.
E
.
x
[
0
][
2
],
Bnum
.
E
.
x
[
1
][
2
],
Bnum
.
E
.
x
[
2
][
2
]);
var
m
=
1
/
5
;
R
.
getTransform
(
translation
,
rotation
,
scaleFactor
,
scaleOrientation
)
;
var
jxx
=
Math
.
sqrt
(
Bnum
.
lambda
.
x
[
0
]);
var
jyy
=
Math
.
sqrt
(
Bnum
.
lambda
.
x
[
1
]);
var
jzz
=
Math
.
sqrt
(
Bnum
.
lambda
.
x
[
2
]);
var
ee_a
=
Math
.
sqrt
(
1
/
2
/
m
*
(
jyy
+
jzz
-
jxx
));
var
ee_b
=
Math
.
sqrt
(
1
/
2
/
m
*
(
jxx
+
jzz
-
jyy
));
var
ee_c
=
Math
.
sqrt
(
1
/
2
/
m
*
(
jxx
+
jyy
-
jzz
));
//x3dom_draw_line("yaxis","green",point, point.add(ynew.multiply(ee_b)));
x3dom_draw_line
(
"xaxis"
,
"red"
,
point
,
point
.
add
(
xnew
.
multiply
(
ee_a
)));
x3dom_draw_line
(
"yaxis"
,
"green"
,
point
,
point
.
add
(
ynew
.
multiply
(
ee_b
)));
x3dom_draw_line
(
"zaxis"
,
"blue"
,
point
,
point
.
add
(
znew
.
multiply
(
ee_c
)));
console
.
log
(
"Covariance matrix"
);
console
.
log
(
C
.
toString
());
// now what if I get transform from this?
var
translation
=
new
x3dom
.
fields
.
SFVec3f
(
0
,
0
,
0
);
var
scaleFactor
=
new
x3dom
.
fields
.
SFVec3f
(
1
,
1
,
1
);
var
rotation
=
new
x3dom
.
fields
.
Quaternion
(
0
,
0
,
1
,
0
);
var
scaleOrientation
=
new
x3dom
.
fields
.
Quaternion
(
0
,
0
,
1
,
0
);
C
.
getTransform
(
translation
,
rotation
,
scaleFactor
,
scaleOrientation
);
var
q
=
rotation
.
toAxisAngle
();
var
q_str
=
q
[
0
].
toString
()
+
" "
+
q
[
1
];
console
.
log
(
"Covariance decomposition"
);
console
.
log
(
translation
.
toString
());
console
.
log
(
rotation
.
toString
());
console
.
log
(
scaleFactor
.
toString
());
console
.
log
(
scaleOrientation
.
toString
());
// draw semi-axes
x3dom_draw_line
(
"xa"
,
"red"
,
e
.
O
,
e
.
O
.
add
(
e
.
Ox
));
x3dom_draw_line
(
"ya"
,
"green"
,
e
.
O
,
e
.
O
.
add
(
e
.
Oy
));
x3dom_draw_line
(
"za"
,
"blue"
,
e
.
O
,
e
.
O
.
add
(
e
.
Oz
));
x3dom_draw_ellipsoid
(
id
,
color
,
transl
,
q_str
,
scale
,
transparency
);
}
function
x3dom_draw_ellipsoid
(
id
,
color
,
transl
,
rotat
,
scale
){
function
x3dom_draw_ellipsoid
(
id
,
color
,
transl
,
rotat
,
scale
,
transparency
=
0.5
){
$
(
"#"
+
id
).
remove
();
...
...
@@ -296,7 +201,7 @@ function x3dom_draw_ellipsoid(id,color,transl,rotat,scale){
' <transform scale="'
+
scale
+
'" >'
,
' <shape>'
,
' <appearance>'
,
' <material diffuseColor="'
+
color
+
'" transparency="
0.5
"></material>'
,
' <material diffuseColor="'
+
color
+
'" transparency="
'
+
transparency
+
'
"></material>'
,
' </appearance>'
,
' <sphere radius="1"></sphere>'
,
' </shape>'
,
...
...
@@ -370,6 +275,17 @@ function x3dom_ellipsoid_inertia_tensor(m,a,b,c){
}
function
x3dom_ellipsoid_inertia_tensor_v2
(
m
,
a
,
b
,
c
){
return
new
x3dom
.
fields
.
SFMatrix4f
(
a
,
0
,
0
,
0
,
0
,
b
,
0
,
0
,
0
,
0
,
c
,
0
,
0
,
0
,
0
,
1
);
}
// also from 4x4 to 3x3
function
matrix_x3dom_to_numeric
(
m
){
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment