You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
To make changes, update the MATLAB code and republish this document.
14
+
--><title>The Tangent Space on the Rotation Group</title><linkrel="schema.DC" href="http://purl.org/dc/elements/1.1/"><metaname="DC.source" content="script_SO3FunTangentSpace.m"></head><body><fontsize="2"><ahref="https://github.com/mtex-toolbox/mtex/blob/develop/doc/SO3Functions/SO3FunTangentSpace.m">
15
+
edit page</a></font><div><!--introduction--><!--/introduction--><p>The tangent space of the rotation group at some rotation \(R\) has 2 different representations. There is a left and a right representation.</p><p>The left tangent space is defined by</p><p>\[ T_R SO(3) = \{ S \cdot R | S=-S^T \} = \mathfrac{so}(3) \cdot R, \]</p><p>where \(\mathfrac{so}(3)\) describes the set of all skew symmetric matices, i.e. <ahref="spinTensor.spinTensor.html">spinTensor</a>'s.</p>
16
+
{% highlight matlab %}
17
+
R = rotation.byAxisAngle(xvector,20*degree)
18
+
S1 = spinTensor(vector3d(0,0,1))
19
+
% left tangent vector
20
+
matrix(S1)*matrix(R)
21
+
{% endhighlight %}
22
+
23
+
{% highlight plaintext %}
24
+
R = rotation
25
+
26
+
Bunge Euler angles in degree
27
+
phi1 Phi phi2
28
+
0 20 0
29
+
30
+
31
+
S1 = spinTensor (xyz)
32
+
rank: 2 (3 x 3)
33
+
34
+
0 -1 0
35
+
1 0 0
36
+
0 0 0
37
+
ans =
38
+
0 -0.9397 0.3420
39
+
1.0000 0 0
40
+
0 0 0
41
+
{% endhighlight %}
42
+
<p>Analogously the right tangent space is defined by</p><p>\[ T_R SO(3) = \{ R \cdot S | S=-S^T \} = R \cdot \mathfrac{so}(3). \]</p>
<p>Note that this spaces are the same.</p><p>In MTEX a tangent vectors is defined by its <ahref="spinTensor.spinTensor.html">spinTensor</a> and an attribute which describes whether it is right or left. Moreover the <ahref="spinTensor.spinTensor.html">spinTensor</a> is saved as <ahref="vector3d.vector3d.html">vector3d</a>, in the following way:</p>
63
+
{% highlight matlab %}
64
+
vL = SO3TangentVector(vector3d(1,2,3))
65
+
S = spinTensor(vL)
66
+
{% endhighlight %}
67
+
68
+
{% highlight plaintext %}
69
+
vL = SO3TangentVector
70
+
TagentSpace: left
71
+
x y z
72
+
1 2 3
73
+
74
+
S = spinTensor (xyz)
75
+
rank: 2 (3 x 3)
76
+
77
+
0 -3 2
78
+
3 0 -1
79
+
-2 1 0
80
+
{% endhighlight %}
81
+
<p>Note that the default tangent space representation is left. We can construct an right tangent vector by</p>
82
+
{% highlight matlab %}
83
+
vR = SO3TangentVector(vector3d(1,2,3),'right')
84
+
{% endhighlight %}
85
+
86
+
{% highlight plaintext %}
87
+
vR = SO3TangentVector
88
+
TagentSpace: right
89
+
x y z
90
+
1 2 3
91
+
{% endhighlight %}
92
+
<p>Here <codeclass="language-plaintext highlighter-rouge">vL</code> and <codeclass="language-plaintext highlighter-rouge">vR</code> have the same coordinates in different spaces (bases). Hence they describe different tangent vectors.</p><p>We can also transform left tangent vectors to right tangent vectors and otherwise. Therefore the rotation in which the tangent space is located is necessary.</p>
93
+
{% highlight matlab %}
94
+
vR = right(vL,R)
95
+
vL = left(vL,R)
96
+
{% endhighlight %}
97
+
98
+
{% highlight plaintext %}
99
+
vR = SO3TangentVector
100
+
TagentSpace: right
101
+
x y z
102
+
1 2.90545 2.13504
103
+
104
+
vL = SO3TangentVector
105
+
TagentSpace: left
106
+
x y z
107
+
1 2 3
108
+
{% endhighlight %}
109
+
<p>We can do the same manually by</p>
110
+
{% highlight matlab %}
111
+
vR = inv(R)*vL
112
+
vL = R*vR
113
+
{% endhighlight %}
114
+
115
+
{% highlight plaintext %}
116
+
vR = vector3d
117
+
x y z
118
+
1 2.90545 2.13504
119
+
120
+
vL = vector3d
121
+
x y z
122
+
1 2 3
123
+
{% endhighlight %}
124
+
<h2id="7">Vector Fields</h2><p>Vector fields on the rotation group are functions that maps any rotation to an tangent vector. An important example is the gradient of an <codeclass="language-plaintext highlighter-rouge"><ahref="SO3Fun.SO3Fun.html">SO3Fun</a></code>.</p><p>Hence any vector field has again a left and a right representation.</p>
125
+
{% highlight matlab %}
126
+
F = SO3Fun.dubna;
127
+
F.SS = specimenSymmetry;
128
+
%F = SO3FunHarmonic(F);
129
+
rot = rotation.rand(3);
130
+
131
+
% left gradient in rot
132
+
F.grad(rot)
133
+
134
+
% right gradient in rot
135
+
inv(rot).*F.grad(rot)
136
+
F.grad(rot,'right')
137
+
{% endhighlight %}
138
+
139
+
{% highlight plaintext %}
140
+
ans = SO3TangentVector
141
+
size: 3 x 1
142
+
TagentSpace: left
143
+
x y z
144
+
-0.165707 -0.146911 0.753701
145
+
-3.10667 -0.548756 4.87704
146
+
7.05267 -10.4397 5.58295
147
+
148
+
ans = vector3d
149
+
size: 3 x 1
150
+
x y z
151
+
-0.755162 -0.0609238 -0.207665
152
+
1.31834 -5.17006 2.29576
153
+
10.6387 -8.30365 -2.78625
154
+
155
+
ans = SO3TangentVector
156
+
size: 3 x 1
157
+
TagentSpace: right
158
+
x y z
159
+
-0.75519 -0.060939 -0.207677
160
+
1.31837 -5.17007 2.29575
161
+
10.6389 -8.30395 -2.78651
162
+
{% endhighlight %}
163
+
<p>The gradient can also computed as function, i.e. as <ahref="SO3VectorField.SO3VectorField.html">SO3VectorField</a>, which internal is an 3 dimensional <ahref="SO3Fun.SO3Fun.html">SO3Fun</a>.</p>
164
+
{% highlight matlab %}
165
+
GL = F.grad
166
+
GR = F.grad('right')
167
+
168
+
GL.eval(rot)
169
+
GR.eval(rot)
170
+
{% endhighlight %}
171
+
172
+
{% highlight plaintext %}
173
+
GL = SO3VectorFieldHarmonic (Quartz → xyz)
174
+
bandwidth: 48
175
+
176
+
177
+
GR = SO3VectorFieldHandle (Quartz → xyz)
178
+
tangent space: right
179
+
180
+
181
+
ans = SO3TangentVector
182
+
size: 3 x 1
183
+
TagentSpace: left
184
+
x y z
185
+
-0.167735 -0.14833 0.756079
186
+
-3.11199 -0.548966 4.88006
187
+
7.05963 -10.4417 5.579
188
+
189
+
ans = SO3TangentVector
190
+
size: 3 x 1
191
+
TagentSpace: right
192
+
x y z
193
+
-0.75519 -0.060939 -0.207677
194
+
1.31837 -5.17007 2.29575
195
+
10.6389 -8.30395 -2.78651
196
+
{% endhighlight %}
197
+
<p>Again we are able to change the tangent space</p>
198
+
{% highlight matlab %}
199
+
left(GL)
200
+
right(GR)
201
+
{% endhighlight %}
202
+
203
+
{% highlight plaintext %}
204
+
ans = SO3VectorFieldHarmonic (Quartz → xyz)
205
+
bandwidth: 48
206
+
207
+
208
+
ans = SO3VectorFieldHandle (Quartz → xyz)
209
+
tangent space: right
210
+
{% endhighlight %}
211
+
<p>Note that the symmetries do not work in the same way as for <ahref="SO3Fun.SO3Fun.html">SO3Fun</a>'s. Dependent from the choosed tangent space representation (left/right) one of the symmetries has other properties.</p><p>In case of right tangent space the evaluation in symmetric orientations only make sense w.r.t. the left symmetry. In case of left tangent space otherwise.</p>
0 commit comments