rot.dist {rotations} | R Documentation |
Rotational distance
Description
Calculate the extrinsic or intrinsic distance between two rotations.
Usage
rot.dist(x, ...)
## S3 method for class 'SO3'
rot.dist(x, R2 = id.SO3, method = "extrinsic", p = 1, ...)
## S3 method for class 'Q4'
rot.dist(x, Q2 = id.Q4, method = "extrinsic", p = 1, ...)
Arguments
x |
|
... |
additional arguments. |
R2 , Q2 |
a single, second rotation in the same parametrization as x. |
method |
string indicating "extrinsic" or "intrinsic" method of distance. |
p |
the order of the distance. |
Details
This function will calculate the intrinsic (Riemannian) or extrinsic
(Euclidean) distance between two rotations. R2
and Q2
are set
to the identity rotations by default. For rotations R_1
and
R_2
both in SO(3)
, the Euclidean distance between them is
||R_1-R_2||_F
where ||\cdot||_F
is the
Frobenius norm. The Riemannian distance is defined as
||Log(R_1^\top
R_2)||_F
where Log
is the matrix logarithm, and it
corresponds to the misorientation angle of R_1^\top R_2
. See
the vignette ‘rotations-intro’ for a comparison of these two distance
measures.
Value
The rotational distance between each rotation in x and R2 or Q2.
Examples
rs <- rcayley(20, kappa = 10)
Rs <- genR(rs, S = id.SO3)
dEs <- rot.dist(Rs,id.SO3)
dRs <- rot.dist(Rs, id.SO3 , method = "intrinsic")
#The intrinsic distance between the true central orientation and each observation
#is the same as the absolute value of observations' respective misorientation angles
all.equal(dRs, abs(rs)) #TRUE
#The extrinsic distance is related to the intrinsic distance
all.equal(dEs, 2*sqrt(2)*sin(dRs/2)) #TRUE