Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
N
navipy
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Container Registry
Model registry
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Olivier Bertrand
navipy
Commits
2560ec37
Commit
2560ec37
authored
6 years ago
by
Olivier Bertrand
Browse files
Options
Downloads
Plain Diff
Merge branch 'Luise' into develop
parents
5f32e9fb
452eae3d
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
navipy/maths/coordinates.py
+73
-0
73 additions, 0 deletions
navipy/maths/coordinates.py
navipy/processing/mcode.py
+25
-68
25 additions, 68 deletions
navipy/processing/mcode.py
navipy/processing/test_OpticFlow.py
+82
-4
82 additions, 4 deletions
navipy/processing/test_OpticFlow.py
with
180 additions
and
72 deletions
navipy/maths/coordinates.py
+
73
−
0
View file @
2560ec37
...
@@ -2,6 +2,10 @@
...
@@ -2,6 +2,10 @@
Conversion between coordinates systems
Conversion between coordinates systems
"""
"""
import
numpy
as
np
import
numpy
as
np
from
navipy.maths.homogeneous_transformations
import
rotation_matrix
from
navipy.scene
import
is_numeric_array
from
navipy.maths.homogeneous_transformations
\
import
compose_matrix
def
cartesian_to_spherical
(
x
,
y
,
z
):
def
cartesian_to_spherical
(
x
,
y
,
z
):
...
@@ -21,3 +25,72 @@ def spherical_to_cartesian(elevation, azimuth, radius=1):
...
@@ -21,3 +25,72 @@ def spherical_to_cartesian(elevation, azimuth, radius=1):
z
=
np
.
sin
(
elevation
)
z
=
np
.
sin
(
elevation
)
cartesian
=
radius
*
cartesian
cartesian
=
radius
*
cartesian
return
x
,
y
,
z
return
x
,
y
,
z
def
cartesian_to_spherical_vectors
(
opticFlow
,
angles
,
viewing_direction
):
"""
Now we need the optic Flow in the spherical coordinates.
A vector in cartesian coordinates can be transform as one in
the spherical coordinates following the transformation:
A_rho =+A_x.*cos(epsilon).*cos(phi)
+A_y.*cos(epsilon).*sin(phi)
+A_z.*sin(epsilon)
A_epsilon=-A_x.*sin(epsilon).*cos(phi)
-A_y.*sin(epsilon).*sin(phi)
+A_z.*cos(epsilon)
A_phi =-A_x.*sin(phi)+A_y.*cos(phi)
for epsilon in [-pi/2 +pi/2] and phi in [0 2pi]
reverse tajectory, needed because the frame x,y,z is expressed in
the orientation Yaw=pitch=roll=0
"""
if
opticFlow
is
None
:
raise
ValueError
(
"
opticFlow must not be None
"
)
if
angles
is
None
:
raise
ValueError
(
"
angles must not be None
"
)
if
viewing_direction
is
None
:
raise
ValueError
(
"
viewing direction must not be None
"
)
if
(
not
isinstance
(
opticFlow
,
np
.
ndarray
)):
raise
TypeError
(
"
vector must be of type np.ndarray
"
)
if
opticFlow
.
shape
[
0
]
!=
3
:
raise
Exception
(
"
first dimension of optic flow vector
\
must have size three
"
)
if
not
is_numeric_array
(
opticFlow
):
raise
TypeError
(
"
opticFlow must be of numerical type
"
)
if
(
not
isinstance
(
viewing_direction
,
list
))
and
\
(
not
isinstance
(
viewing_direction
,
np
.
ndarray
)):
raise
TypeError
(
"
angles must be list or np.ndarray
"
)
if
not
is_numeric_array
(
viewing_direction
):
raise
TypeError
(
"
viewing_direction must be of numerical type
"
)
if
len
(
viewing_direction
)
!=
2
:
raise
Exception
(
"
first dimension of viewing
\
direction must be of size two
"
)
vec
=
opticFlow
ypr
=
angles
M
=
compose_matrix
(
scale
=
None
,
shear
=
None
,
angles
=
ypr
,
translate
=
None
,
perspective
=
None
,
axes
=
'
rzyx
'
)[:
3
,
:
3
]
vec
=
np
.
dot
(
np
.
transpose
(
M
),
vec
)
opticFlow
=
vec
OFT_x
=
opticFlow
[
0
]
OFT_y
=
opticFlow
[
1
]
OFT_z
=
opticFlow
[
2
]
epsilon
=
viewing_direction
[
1
]
phi
=
viewing_direction
[
0
]
# print("OFTs", opticFlow)
# print("ep,phi", epsilon, phi)
rofterm1
=
+
OFT_x
*
np
.
cos
(
epsilon
)
*
np
.
cos
(
phi
)
rofterm2
=
+
OFT_y
*
np
.
cos
(
epsilon
)
*
np
.
sin
(
phi
)
rofterm3
=
+
OFT_z
*
np
.
sin
(
epsilon
)
rof
=
rofterm1
+
rofterm2
+
rofterm3
vofterm1
=
-
OFT_x
*
np
.
sin
(
epsilon
)
*
np
.
cos
(
phi
)
vofterm2
=
-
OFT_y
*
np
.
sin
(
epsilon
)
*
np
.
sin
(
phi
)
vofterm3
=
OFT_z
*
np
.
cos
(
epsilon
)
vof
=
vofterm1
+
vofterm2
+
vofterm3
hof
=
-
OFT_x
*
np
.
sin
(
phi
)
+
OFT_y
*
np
.
cos
(
phi
)
return
[
rof
,
hof
,
vof
]
This diff is collapsed.
Click to expand it.
navipy/processing/mcode.py
+
25
−
68
View file @
2560ec37
...
@@ -4,7 +4,10 @@ Motion code
...
@@ -4,7 +4,10 @@ Motion code
from
navipy.scene
import
check_scene
from
navipy.scene
import
check_scene
from
navipy.scene
import
__spherical_indeces__
from
navipy.scene
import
__spherical_indeces__
from
navipy.scene
import
is_numeric_array
from
navipy.scene
import
is_numeric_array
from
navipy.maths.homogeneous_transformations
import
rotation_matrix
from
navipy.maths.homogeneous_transformations
\
import
compose_matrix
from
navipy.maths.coordinates
\
import
spherical_to_cartesian
,
cartesian_to_spherical_vectors
import
numpy
as
np
import
numpy
as
np
import
pandas
as
pd
import
pandas
as
pd
...
@@ -82,10 +85,13 @@ NOTE: this is NOT the normal spheic coordinate system!
...
@@ -82,10 +85,13 @@ NOTE: this is NOT the normal spheic coordinate system!
raise
ValueError
(
"
azimuth must be float or integer
"
)
raise
ValueError
(
"
azimuth must be float or integer
"
)
if
(
not
isinstance
(
sp
[
1
],
float
))
and
(
not
isinstance
(
sp
[
1
],
int
)):
if
(
not
isinstance
(
sp
[
1
],
float
))
and
(
not
isinstance
(
sp
[
1
],
int
)):
raise
ValueError
(
"
elevation must be float or integer
"
)
raise
ValueError
(
"
elevation must be float or integer
"
)
"""
vector = np.zeros((3,))
vector = np.zeros((3,))
vector = [np.dot(np.cos(sp[1]), np.cos(sp[0])),
vector = [np.dot(np.cos(sp[1]), np.cos(sp[0])),
np.dot(np.cos(sp[1]), np.sin(sp[0])),
np.dot(np.cos(sp[1]), np.sin(sp[0])),
np.sin(sp[1])]
np.sin(sp[1])]
"""
vector
=
np
.
array
(
spherical_to_cartesian
(
sp
[
1
],
sp
[
0
]))
return
vector
return
vector
...
@@ -248,8 +254,12 @@ def OFSubroutineYawPitchRoll(vec, ypr, inverse):
...
@@ -248,8 +254,12 @@ def OFSubroutineYawPitchRoll(vec, ypr, inverse):
# end
# end
# rotations around relative rotatet axis
# rotations around relative rotatet axis
M
=
compose_matrix
(
scale
=
None
,
shear
=
None
,
angles
=
ypr
,
translate
=
None
,
perspective
=
None
,
axes
=
'
rzyx
'
)[:
3
,
:
3
]
if
(
inverse
):
if
(
inverse
):
vec
=
np
.
dot
(
np
.
transpose
(
M
),
vec
)
"""
vec=tmpvec
M1 = rotation_matrix(-ypr[2], [1, 0, 0])[:3, :3]
M1 = rotation_matrix(-ypr[2], [1, 0, 0])[:3, :3]
vec = np.transpose(np.dot(M1, np.transpose(vec)))
vec = np.transpose(np.dot(M1, np.transpose(vec)))
roty = np.transpose(np.dot(M1, np.transpose([0, 1, 0])))
roty = np.transpose(np.dot(M1, np.transpose([0, 1, 0])))
...
@@ -259,9 +269,14 @@ def OFSubroutineYawPitchRoll(vec, ypr, inverse):
...
@@ -259,9 +269,14 @@ def OFSubroutineYawPitchRoll(vec, ypr, inverse):
M4 = rotation_matrix(-ypr[1], [0, 1, 0])[:3, :3]
M4 = rotation_matrix(-ypr[1], [0, 1, 0])[:3, :3]
rotatedax = np.transpose(np.dot(M4, np.transpose(rotz)))
rotatedax = np.transpose(np.dot(M4, np.transpose(rotz)))
M3
=
rotation_matrix
(
-
ypr
[
0
],
rotatedax
)[:
3
,
:
3
]
M3 = rotation_matrix(-ypr[0], rotatedax)[:3,:3]
vec = np.transpose(np.dot(M3, np.transpose(vec)))
vec = np.transpose(np.dot(M3, np.transpose(vec)))
"""
else
:
else
:
vec
=
np
.
dot
(
M
,
vec
)
"""
print(
"
new normal vec
"
, vec)
vec = tmpvec
M1 = rotation_matrix(ypr[0], [0, 0, 1])[:3, :3]
M1 = rotation_matrix(ypr[0], [0, 0, 1])[:3, :3]
vec = np.transpose(np.dot(M1, np.transpose(vec)))
vec = np.transpose(np.dot(M1, np.transpose(vec)))
roty = np.transpose(np.dot(M1, np.transpose([0, 1, 0])))
roty = np.transpose(np.dot(M1, np.transpose([0, 1, 0])))
...
@@ -273,72 +288,12 @@ def OFSubroutineYawPitchRoll(vec, ypr, inverse):
...
@@ -273,72 +288,12 @@ def OFSubroutineYawPitchRoll(vec, ypr, inverse):
M3 = rotation_matrix(ypr[2], rotatedax)[:3, :3]
M3 = rotation_matrix(ypr[2], rotatedax)[:3, :3]
vec = np.transpose(np.dot(M3, np.transpose(vec)))
vec = np.transpose(np.dot(M3, np.transpose(vec)))
print(
"
old normal vec
"
, vec)
"""
return
vec
return
vec
def
Matrix_transform
(
opticFlow
,
angles
,
viewing_direction
):
"""
Now we need the optic Flow in the spherical coordinates.
A vector in cartesian coordinates can be transform as one in
the spherical coordinates following the transformation:
A_rho =+A_x.*cos(epsilon).*cos(phi)
+A_y.*cos(epsilon).*sin(phi)
+A_z.*sin(epsilon)
A_epsilon=-A_x.*sin(epsilon).*cos(phi)
-A_y.*sin(epsilon).*sin(phi)
+A_z.*cos(epsilon)
A_phi =-A_x.*sin(phi)+A_y.*cos(phi)
for epsilon in [-pi/2 +pi/2] and phi in [0 2pi]
reverse tajectory, needed because the frame x,y,z is expressed in
the orientation Yaw=pitch=roll=0
"""
if
opticFlow
is
None
:
raise
ValueError
(
"
opticFlow must not be None
"
)
if
angles
is
None
:
raise
ValueError
(
"
angles must not be None
"
)
if
viewing_direction
is
None
:
raise
ValueError
(
"
viewing direction must not be None
"
)
if
(
not
isinstance
(
opticFlow
,
np
.
ndarray
)):
raise
TypeError
(
"
vector must be of type np.ndarray
"
)
if
opticFlow
.
shape
[
0
]
!=
3
:
raise
Exception
(
"
first dimension of optic flow vector
\
must have size three
"
)
if
not
is_numeric_array
(
opticFlow
):
raise
TypeError
(
"
opticFlow must be of numerical type
"
)
if
(
not
isinstance
(
viewing_direction
,
list
))
and
\
(
not
isinstance
(
viewing_direction
,
np
.
ndarray
)):
raise
TypeError
(
"
angles must be list or np.ndarray
"
)
if
not
is_numeric_array
(
viewing_direction
):
raise
TypeError
(
"
viewing_direction must be of numerical type
"
)
if
len
(
viewing_direction
)
!=
2
:
raise
Exception
(
"
first dimension of viewing
\
direction must be of size two
"
)
opticFlow
=
OFSubroutineYawPitchRoll
(
opticFlow
,
angles
,
True
)
OFT_x
=
opticFlow
[
0
]
OFT_y
=
opticFlow
[
1
]
OFT_z
=
opticFlow
[
2
]
epsilon
=
viewing_direction
[
1
]
phi
=
viewing_direction
[
0
]
# print("OFTs", opticFlow)
# print("ep,phi", epsilon, phi)
rofterm1
=
+
OFT_x
*
np
.
cos
(
epsilon
)
*
np
.
cos
(
phi
)
rofterm2
=
+
OFT_y
*
np
.
cos
(
epsilon
)
*
np
.
sin
(
phi
)
rofterm3
=
+
OFT_z
*
np
.
sin
(
epsilon
)
rof
=
rofterm1
+
rofterm2
+
rofterm3
vofterm1
=
-
OFT_x
*
np
.
sin
(
epsilon
)
*
np
.
cos
(
phi
)
vofterm2
=
-
OFT_y
*
np
.
sin
(
epsilon
)
*
np
.
sin
(
phi
)
vofterm3
=
OFT_z
*
np
.
cos
(
epsilon
)
vof
=
vofterm1
+
vofterm2
+
vofterm3
hof
=
-
OFT_x
*
np
.
sin
(
phi
)
+
OFT_y
*
np
.
cos
(
phi
)
return
[
rof
,
hof
,
vof
]
def
optic_flow
(
scene
,
viewing_directions
,
velocity
,
distance_channel
=
3
):
def
optic_flow
(
scene
,
viewing_directions
,
velocity
,
distance_channel
=
3
):
"""
optic flow
"""
optic flow
:param scene: ibpc
:param scene: ibpc
...
@@ -427,6 +382,7 @@ def optic_flow(scene, viewing_directions, velocity, distance_channel=3):
...
@@ -427,6 +382,7 @@ def optic_flow(scene, viewing_directions, velocity, distance_channel=3):
rollNow
=
OFSubroutineYawPitchRoll
([
0
,
0
,
1
],
[
0
,
0
,
roll
],
False
)
rollNow
=
OFSubroutineYawPitchRoll
([
0
,
0
,
1
],
[
0
,
0
,
roll
],
False
)
rollNext
=
OFSubroutineYawPitchRoll
([
0
,
0
,
1
],
[
0
,
0
,
roll
+
droll
],
False
)
rollNext
=
OFSubroutineYawPitchRoll
([
0
,
0
,
1
],
[
0
,
0
,
roll
+
droll
],
False
)
rRoll
=
np
.
cross
(
rollNow
,
rollNext
)
rRoll
=
np
.
cross
(
rollNow
,
rollNext
)
rof
=
np
.
zeros
((
azimuth
.
shape
[
0
],
elevation
.
shape
[
0
]))
rof
=
np
.
zeros
((
azimuth
.
shape
[
0
],
elevation
.
shape
[
0
]))
hof
=
np
.
zeros
((
azimuth
.
shape
[
0
],
elevation
.
shape
[
0
]))
hof
=
np
.
zeros
((
azimuth
.
shape
[
0
],
elevation
.
shape
[
0
]))
vof
=
np
.
zeros
((
azimuth
.
shape
[
0
],
elevation
.
shape
[
0
]))
vof
=
np
.
zeros
((
azimuth
.
shape
[
0
],
elevation
.
shape
[
0
]))
...
@@ -478,9 +434,10 @@ def optic_flow(scene, viewing_directions, velocity, distance_channel=3):
...
@@ -478,9 +434,10 @@ def optic_flow(scene, viewing_directions, velocity, distance_channel=3):
# Transform OF from Cartesian coordinates to Spherical coordinates
# Transform OF from Cartesian coordinates to Spherical coordinates
# according to method
# according to method
(
OF_rho
,
OF_phi
,
OF_epsilon
)
=
Matrix_transform
(
opticFlow
,
(
OF_rho
,
OF_phi
,
OF_epsilon
)
=
\
[
yaw
,
pitch
,
roll
],
cartesian_to_spherical_vectors
(
opticFlow
,
[
a
,
e
])
[
yaw
,
pitch
,
roll
],
[
a
,
e
])
rof
[
j
,
i
]
=
OF_rho
rof
[
j
,
i
]
=
OF_rho
hof
[
j
,
i
]
=
OF_phi
hof
[
j
,
i
]
=
OF_phi
...
...
This diff is collapsed.
Click to expand it.
navipy/processing/test_OpticFlow.py
+
82
−
4
View file @
2560ec37
...
@@ -3,6 +3,8 @@ import navipy.processing.mcode as mcode
...
@@ -3,6 +3,8 @@ import navipy.processing.mcode as mcode
import
pandas
as
pd
import
pandas
as
pd
# import matplotlib.pyplot as plt
# import matplotlib.pyplot as plt
import
numpy
as
np
import
numpy
as
np
# from navipy.maths.homogeneous_transformations
# import rotation_matrix, compose_matrix, decompose_matrix
def
Scale
(
data
,
oldmin
,
oldmax
,
mini
,
maxi
,
ran
):
def
Scale
(
data
,
oldmin
,
oldmax
,
mini
,
maxi
,
ran
):
...
@@ -103,7 +105,7 @@ class TestCase(unittest.TestCase):
...
@@ -103,7 +105,7 @@ class TestCase(unittest.TestCase):
self
.
viewing_directions
,
self
.
viewing_directions
,
velocity
)
velocity
)
for
convention
in
[
'
ryxz
'
,
'
ryzx
'
,
'
rxzy
'
,
'
rzyx
'
,
for
convention
in
[
'
ryxz
'
,
'
ryzx
'
,
'
rxzy
'
,
'
rzyx
'
,
'
rzxy
'
,
'
alsjf
'
,
'
233
'
,
9
,
None
,
-
1
]:
'
rzxy
'
,
'
alsjf
'
,
'
233
'
,
9
,
-
1
]:
tuples
=
[(
'
location
'
,
'
x
'
),
(
'
location
'
,
'
y
'
),
tuples
=
[(
'
location
'
,
'
x
'
),
(
'
location
'
,
'
y
'
),
(
'
location
'
,
'
z
'
),
(
'
location
'
,
'
dx
'
),
(
'
location
'
,
'
z
'
),
(
'
location
'
,
'
dx
'
),
(
'
location
'
,
'
dy
'
),
(
'
location
'
,
'
dz
'
),
(
'
location
'
,
'
dy
'
),
(
'
location
'
,
'
dz
'
),
...
@@ -428,8 +430,6 @@ class TestCase(unittest.TestCase):
...
@@ -428,8 +430,6 @@ class TestCase(unittest.TestCase):
velocity
[
'
rxyz
'
][
'
dalpha_1
'
]
=
dpitch
velocity
[
'
rxyz
'
][
'
dalpha_1
'
]
=
dpitch
velocity
[
'
rxyz
'
][
'
dalpha_2
'
]
=
droll
velocity
[
'
rxyz
'
][
'
dalpha_2
'
]
=
droll
print
(
velocity
)
rof
,
hof
,
vof
=
mcode
.
optic_flow
(
scene
,
viewing_directions
,
rof
,
hof
,
vof
=
mcode
.
optic_flow
(
scene
,
viewing_directions
,
velocity
)
velocity
)
cosel
=
np
.
cos
(
elevation
)
cosel
=
np
.
cos
(
elevation
)
...
@@ -691,7 +691,7 @@ class TestCase(unittest.TestCase):
...
@@ -691,7 +691,7 @@ class TestCase(unittest.TestCase):
self
.
velocity
[
self
.
convention
][
'
dalpha_2
'
]
=
droll
self
.
velocity
[
self
.
convention
][
'
dalpha_2
'
]
=
droll
rof
,
hof
,
vof
=
mcode
.
optic_flow
(
self
.
scene
,
self
.
viewing_directions
,
rof
,
hof
,
vof
=
mcode
.
optic_flow
(
self
.
scene
,
self
.
viewing_directions
,
self
.
velocity
)
self
.
velocity
)
"""
testrof = [[-4.88735544e-05, -4.88735544e-05, -4.88735544e-05],
testrof = [[-4.88735544e-05, -4.88735544e-05, -4.88735544e-05],
[-4.91907871e-05, -4.94889779e-05, -4.97869621e-05],
[-4.91907871e-05, -4.94889779e-05, -4.97869621e-05],
[-4.94479358e-05, -5.00455194e-05, -5.06426694e-05]]
[-4.94479358e-05, -5.00455194e-05, -5.06426694e-05]]
...
@@ -701,10 +701,88 @@ class TestCase(unittest.TestCase):
...
@@ -701,10 +701,88 @@ class TestCase(unittest.TestCase):
testvof = [[-0.09950539, -0.09948998, -0.09944426],
testvof = [[-0.09950539, -0.09948998, -0.09944426],
[-0.09950368, -0.0994883, -0.09944262],
[-0.09950368, -0.0994883, -0.09944262],
[-0.09950195, -0.09948661, -0.09944095]]
[-0.09950195, -0.09948661, -0.09944095]]
"""
testrof
=
[[
-
8.88472903e-19
,
-
8.87544964e-19
,
-
8.84761429e-19
],
[
1.30104261e-18
,
-
2.16840434e-19
,
-
8.67361738e-19
],
[
-
4.33680869e-19
,
0.00000000e+00
,
4.33680869e-19
]]
testhof
=
[[
3.18909128e-10
,
1.73652203e-03
,
3.47251478e-03
],
[
-
1.74233017e-04
,
1.56202421e-03
,
3.29775256e-03
],
[
-
3.48413280e-04
,
1.38705059e-03
,
3.12198582e-03
]]
testvof
=
[[
-
0.09950042
,
-
0.09948526
,
-
0.0994398
],
[
-
0.09950042
,
-
0.09948526
,
-
0.0994398
],
[
-
0.09950042
,
-
0.09948526
,
-
0.0994398
]]
assert
np
.
all
(
np
.
isclose
(
rof
,
testrof
))
assert
np
.
all
(
np
.
isclose
(
rof
,
testrof
))
assert
np
.
all
(
np
.
isclose
(
hof
,
testhof
))
assert
np
.
all
(
np
.
isclose
(
hof
,
testhof
))
assert
np
.
all
(
np
.
isclose
(
vof
,
testvof
))
assert
np
.
all
(
np
.
isclose
(
vof
,
testvof
))
"""
def test_findconv(self):
ypr=[1.57079633,0.1,0.1]
vec=[0, -0.09900333, 0.00993347]
tmpvec = vec
M1 = rotation_matrix(-ypr[2], [1, 0, 0])[:3, :3]
vec = np.transpose(np.dot(M1, np.transpose(vec)))
roty = np.transpose(np.dot(M1, np.transpose([0, 1, 0])))
M2 = rotation_matrix(-ypr[1], roty)[:3, :3]
vec = np.transpose(np.dot(M2, np.transpose(vec)))
rotz = np.transpose(np.dot(M1, np.transpose([0, 0, 1])))
#rotz = np.transpose(np.dot(M2, np.transpose(rotz)))
M4 = rotation_matrix(-ypr[1], [0, 1, 0])[:3, :3]
rotatedax = np.transpose(np.dot(M4, np.transpose(rotz)))
M3 = rotation_matrix(-ypr[0], rotatedax)
scale, shear, angles, translate, perspective =
decompose_matrix(M3,
'
rxyz
'
)
print(
"
angels
"
, angles)
vec = np.transpose(np.dot(M3[:3,:3], np.transpose(vec)))
print(
"
old vec
"
, vec)
oldvec=vec
angles=[ypr[0], ypr[1],ypr[2], -ypr[0], -ypr[1], -ypr[2]]
#for c in [
'
sxyz
'
,
'
sxyx
'
,
'
sxzy
'
,
'
sxzx
'
,
'
syzx
'
,
'
syzy
'
,
'
syxz
'
,
'
syxy
'
,
#
'
szxy
'
,
'
szxz
'
,
'
szyx
'
,
'
szyz
'
,
'
rzyx
'
,
'
rxyx
'
,
'
ryzx
'
,
'
rxzx
'
,
#
'
rxzy
'
,
'
ryzy
'
,
'
rzxy
'
,
'
ryxy
'
,
'
ryxz
'
,
'
rzxz
'
,
'
rxyz
'
,
'
rzyz
'
]:
for al in angles:
for bl in angles:
for cl in angles:
M = compose_matrix(scale=None, shear=None,
angles=[al, bl,cl],
translate=None,
perspective=None,
axes=
'
rzyx
'
)[:3,:3]
#M= np.transpose(M)
vec = np.dot(np.transpose(M), vec)
if (np.isclose(vec[0], oldvec[0]) or
np.isclose(vec[0], oldvec[1]) or
np.isclose(vec[0], oldvec[2]) or
\
np.isclose(vec[0], -oldvec[0]) or
np.isclose(vec[0], -oldvec[1]) or
np.isclose(vec[0], -oldvec[2])) and
\
(np.isclose(vec[1], oldvec[0]) or
np.isclose(vec[1], oldvec[1]) or
np.isclose(vec[1], oldvec[2]) or
\
np.isclose(vec[1], -oldvec[0]) or
np.isclose(vec[1], -oldvec[1]) or
np.isclose(vec[1], -oldvec[2])) and
\
(np.isclose(vec[2], oldvec[0]) or
np.isclose(vec[2], oldvec[1]) or
np.isclose(vec[2], oldvec[2]) or
\
np.isclose(vec[2], -oldvec[0]) or
np.isclose(vec[2], -oldvec[1]) or
np.isclose(vec[2], -oldvec[2])):
print(
"
found
"
)
print(
"
conve
"
, al, bl, cl)
print(
"
new vec
"
, vec)
#scale, shear, angles, translate,
perspective =decompose_matrix(M3,c)
#print(
"
angels
"
, angles)
#print(
"
old vec
"
, oldvec)
print(
"
new vec
"
, vec)
vec=tmpvec
"""
if
__name__
==
'
__main__
'
:
if
__name__
==
'
__main__
'
:
...
...
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