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
0e3c7053
Commit
0e3c7053
authored
Nov 17, 2018
by
Oleg Dzhimiev
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
started constructing derivatives
parent
7647bcd0
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
248 additions
and
74 deletions
+248
-74
x3dom_deltas.js
js/x3dom_deltas.js
+248
-74
No files found.
js/x3dom_deltas.js
View file @
0e3c7053
...
...
@@ -53,80 +53,6 @@ function Av_f(mark,pars){
}
function
v_f
(
mark
,
pars
){
var
e1_world
=
get_e1_w
(
mark
,
pars
);
var
e2_world
=
get_e2_w
(
mark
,
pars
);
// pointing from model mark to map mark
var
v
=
e1_world
.
subtract
(
e2_world
);
return
v
;
}
// model to world (for debugging mainly)
function
get_e1_M2W
(
mark
,
pars
){
var
heading
=
pars
.
heading
*
Math
.
PI
/
180
;
var
tilt
=
(
pars
.
tilt
-
90
)
*
Math
.
PI
/
180
;
var
roll
=
pars
.
roll
*
Math
.
PI
/
180
;
// Heading,Tilt,Roll
var
Mh
=
x3dom
.
fields
.
SFMatrix4f
.
rotationZ
(
heading
);
var
Mt
=
x3dom
.
fields
.
SFMatrix4f
.
rotationY
(
tilt
);
var
Mr
=
x3dom
.
fields
.
SFMatrix4f
.
rotationX
(
roll
);
// I'll need R'
var
R
=
Mh
.
mult
(
Mt
).
mult
(
Mr
);
// T is constant
var
T
=
x3dom_toYawPitchRoll
();
var
M2W
=
R
.
mult
(
T
);
return
M2W
;
}
// get ellipse 1 in world coordinates
function
get_e1_w
(
mark
,
pars
){
var
M2W
=
get_e1_M2W
(
mark
,
pars
);
var
W2M
=
M2W
.
inverse
();
var
e1_model
=
new
x3dom
.
fields
.
SFVec3f
(
mark
.
model
.
x
,
mark
.
model
.
y
,
mark
.
model
.
z
);
var
e1_world
=
M2W
.
multMatrixVec
(
e1_model
);
return
e1_world
;
}
// get ellipse 2 in world coordinates
function
get_e2_w
(
mark
,
pars
){
var
p0_ll
=
new
L
.
LatLng
(
pars
.
lat
,
pars
.
lng
);
var
p1_ll
=
new
L
.
LatLng
(
mark
.
map
.
lat
,
mark
.
map
.
lng
);
// get coordinates of marker in real world coorinates
// the world is
var
pi_ll
=
new
L
.
LatLng
(
p0_ll
.
lat
,
p1_ll
.
lng
);
// will need derivatives from this distanceTo
var
dx
=
pi_ll
.
distanceTo
(
p1_ll
);
var
dy
=
p0_ll
.
distanceTo
(
pi_ll
);
var
dz
=
(
mark
.
map
.
alt
-
pars
.
alt
)
*
(
-
1
);
// sign
if
(
p1_ll
.
lng
<
p0_ll
.
lng
)
dy
=
-
dy
;
if
(
p1_ll
.
lat
<
p0_ll
.
lat
)
dx
=
-
dx
;
// dx,dy,dz - coorinates map marker in 'world' coordinates
// with the center in p0
//
// which is ellipse 2 e2.
var
e2_world
=
new
x3dom
.
fields
.
SFVec3f
(
dx
,
dy
,
dz
);
return
e2_world
;
}
function
A_f
(
mark
,
pars
){
var
e1_world
=
get_e1_w
(
mark
,
pars
);
...
...
@@ -235,6 +161,164 @@ function A_f(mark,pars){
}
function
v_f
(
mark
,
pars
){
var
e1_world
=
get_e1_w
(
mark
,
pars
);
var
e2_world
=
get_e2_w
(
mark
,
pars
);
// pointing from model mark to map mark
var
v
=
e1_world
.
subtract
(
e2_world
);
return
v
;
}
// rads per degree
var
RPD
=
Math
.
PI
/
180
;
// v derivatives
function
dv_lat
(
mark
,
pars
){
// dv = de1 - de2, where de1==0
// dv = -de2
//var dlat = p2_ll.lat-p1_ll.lat;
//var dlon = p2_ll.lng-p1_ll.lng;
//var dy = Math.sin(dlon)*Math.cos(p2_ll.lat);
//var dx = Math.cos(p1_ll.lat)*Math.sin(p2_ll.lat)-Math.sin(p1_ll.lat)*Math.cos(p2_ll.lat)*Math.cos(dlon);
//
var
p0_ll
=
new
L
.
LatLng
(
pars
.
lat
,
pars
.
lng
);
var
p1_ll
=
new
L
.
LatLng
(
mark
.
map
.
lat
,
mark
.
map
.
lng
);
//var Earth = 6371000;
// take from leaflet
var
Earth
=
L
.
CRS
.
Earth
.
R
;
}
function
dv_heading
(
mark
,
pars
){
// dv = de1 - de2, where de2==0
var
heading
=
pars
.
heading
*
RPD
;
var
tilt
=
(
pars
.
tilt
-
90
)
*
RPD
;
var
roll
=
pars
.
roll
*
RPD
;
var
M
=
dHTR
(
heading
,
tilt
,
roll
);
var
T
=
x3dom_toYawPitchRoll
();
var
e1_model
=
new
x3dom
.
fields
.
SFVec3f
(
mark
.
model
.
x
,
mark
.
model
.
y
,
mark
.
model
.
z
);
var
dv_heading
=
M
.
mult
(
T
).
multMatrixVec
(
e1_model
).
multiply
(
RPD
);
return
dv_heading
;
}
function
dv_tilt
(
mark
,
pars
){
// dv = de1
var
heading
=
pars
.
heading
*
RPD
;
var
tilt
=
(
pars
.
tilt
-
90
)
*
RPD
;
var
roll
=
pars
.
roll
*
RPD
;
var
M
=
HdTR
(
heading
,
tilt
,
roll
);
var
T
=
x3dom_toYawPitchRoll
();
var
e1_model
=
new
x3dom
.
fields
.
SFVec3f
(
mark
.
model
.
x
,
mark
.
model
.
y
,
mark
.
model
.
z
);
var
dv_tilt
=
M
.
mult
(
T
).
multMatrixVec
(
e1_model
).
multiply
(
RPD
);
return
dv_tilt
;
}
function
dv_roll
(
mark
,
pars
){
// dv = de1
var
heading
=
pars
.
heading
*
RPD
;
var
tilt
=
(
pars
.
tilt
-
90
)
*
RPD
;
var
roll
=
pars
.
roll
*
RPD
;
var
M
=
HTdR
(
heading
,
tilt
,
roll
);
var
T
=
x3dom_toYawPitchRoll
();
var
e1_model
=
new
x3dom
.
fields
.
SFVec3f
(
mark
.
model
.
x
,
mark
.
model
.
y
,
mark
.
model
.
z
);
var
dv_roll
=
M
.
mult
(
T
).
multMatrixVec
(
e1_model
).
multiply
(
RPD
);
return
dv_roll
;
}
// BASIC FUNCTIONS and DERIVATIVES
// model to world (for debugging mainly)
function
get_e1_M2W
(
mark
,
pars
){
var
heading
=
pars
.
heading
*
RPD
;
var
tilt
=
(
pars
.
tilt
-
90
)
*
RPD
;
var
roll
=
pars
.
roll
*
RPD
;
// Heading,Tilt,Roll
var
Mh
=
x3dom
.
fields
.
SFMatrix4f
.
rotationZ
(
heading
);
var
Mt
=
x3dom
.
fields
.
SFMatrix4f
.
rotationY
(
tilt
);
var
Mr
=
x3dom
.
fields
.
SFMatrix4f
.
rotationX
(
roll
);
// I'll need R'
var
R
=
Mh
.
mult
(
Mt
).
mult
(
Mr
);
// T is constant
var
T
=
x3dom_toYawPitchRoll
();
var
M2W
=
R
.
mult
(
T
);
return
M2W
;
}
// get ellipse 1 in world coordinates
function
get_e1_w
(
mark
,
pars
){
var
M2W
=
get_e1_M2W
(
mark
,
pars
);
var
W2M
=
M2W
.
inverse
();
var
e1_model
=
new
x3dom
.
fields
.
SFVec3f
(
mark
.
model
.
x
,
mark
.
model
.
y
,
mark
.
model
.
z
);
var
e1_world
=
M2W
.
multMatrixVec
(
e1_model
);
return
e1_world
;
}
// get ellipse 2 in world coordinates
function
get_e2_w
(
mark
,
pars
){
var
p0_ll
=
new
L
.
LatLng
(
pars
.
lat
,
pars
.
lng
);
var
p1_ll
=
new
L
.
LatLng
(
mark
.
map
.
lat
,
mark
.
map
.
lng
);
// get coordinates of marker in real world coorinates
// the world is
var
pi_ll
=
new
L
.
LatLng
(
p0_ll
.
lat
,
p1_ll
.
lng
);
// will need derivatives from this distanceTo
var
dx
=
pi_ll
.
distanceTo
(
p1_ll
);
var
dy
=
p0_ll
.
distanceTo
(
pi_ll
);
var
dz
=
(
mark
.
map
.
alt
-
pars
.
alt
)
*
(
-
1
);
// sign
if
(
p1_ll
.
lng
<
p0_ll
.
lng
)
dy
=
-
dy
;
if
(
p1_ll
.
lat
<
p0_ll
.
lat
)
dx
=
-
dx
;
// dx,dy,dz - coorinates map marker in 'world' coordinates
// with the center in p0
//
// which is ellipse 2 e2.
var
e2_world
=
new
x3dom
.
fields
.
SFVec3f
(
dx
,
dy
,
dz
);
return
e2_world
;
}
function
Av_df_dx
(){
console
.
log
(
"Welcome to dAv/dx"
);
...
...
@@ -397,13 +481,103 @@ function matrix_x3dom_to_numeric(m){
}
// for rotation matrices
function
Rx
(
a
){
return
new
x3dom
.
fields
.
SFMatrix4f
(
1
,
0
,
0
,
0
,
0
,
Math
.
cos
(
a
),
-
Math
.
sin
(
a
),
0
,
0
,
Math
.
sin
(
a
),
Math
.
cos
(
a
),
0
,
0
,
0
,
0
,
1
);
}
function
Ry
(
a
){
return
new
x3dom
.
fields
.
SFMatrix4f
(
Math
.
cos
(
a
),
0
,
Math
.
sin
(
a
),
0
,
0
,
1
,
0
,
0
,
-
Math
.
sin
(
a
),
0
,
Math
.
cos
(
a
),
0
,
0
,
0
,
0
,
1
);
}
function
Rz
(
a
){
return
new
x3dom
.
fields
.
SFMatrix4f
(
Math
.
cos
(
a
),
-
Math
.
sin
(
a
),
0
,
0
,
Math
.
sin
(
a
),
Math
.
cos
(
a
),
0
,
0
,
0
,
0
,
1
,
0
,
0
,
0
,
0
,
1
);
}
function
dRx
(
a
){
return
new
x3dom
.
fields
.
SFMatrix4f
(
1
,
0
,
0
,
0
,
0
,
-
Math
.
sin
(
a
),
-
Math
.
cos
(
a
),
0
,
0
,
Math
.
cos
(
a
),
-
Math
.
sin
(
a
),
0
,
0
,
0
,
0
,
1
);
}
function
dRy
(
a
){
return
new
x3dom
.
fields
.
SFMatrix4f
(
-
Math
.
sin
(
a
),
0
,
Math
.
cos
(
a
),
0
,
0
,
1
,
0
,
0
,
-
Math
.
cos
(
a
),
0
,
-
Math
.
sin
(
a
),
0
,
0
,
0
,
0
,
1
);
}
function
dRz
(
a
){
return
new
x3dom
.
fields
.
SFMatrix4f
(
-
Math
.
sin
(
a
),
-
Math
.
cos
(
a
),
0
,
0
,
Math
.
cos
(
a
),
-
Math
.
sin
(
a
),
0
,
0
,
0
,
0
,
1
,
0
,
0
,
0
,
0
,
1
);
}
function
dHTR
(
h
,
t
,
r
){
var
m1
=
dRz
(
h
);
var
m2
=
Ry
(
t
);
var
m3
=
Rx
(
r
);
return
m1
.
mult
(
m2
).
mult
(
m3
);
}
function
HdTR
(
h
,
t
,
r
){
var
m1
=
Rz
(
h
);
var
m2
=
dRy
(
t
);
var
m3
=
Rx
(
r
);
return
m1
.
mult
(
m2
).
mult
(
m3
);
}
function
HTdR
(
h
,
t
,
r
){
var
m1
=
Rz
(
h
);
var
m2
=
Ry
(
t
);
var
m3
=
dRx
(
r
);
return
m1
.
mult
(
m2
).
mult
(
m3
);
}
...
...
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