Nothing
## ----setup, include=FALSE-----------------------------------------------------------------------------------
knitr::opts_chunk$set(echo = TRUE)
library("clifford")
library("onion")
## ----out.width='15%', out.extra='style="float:right; padding:10px"',echo=FALSE------------------------------
knitr::include_graphics(system.file("help/figures/clifford.png", package = "clifford"))
## -----------------------------------------------------------------------------------------------------------
options(maxdim=3) # paranoid safety measure
## -----------------------------------------------------------------------------------------------------------
q1 <- +1 + 2* -e(c(1,2)) + 3*-e(c(1,3)) + 4*-e(c(2,3))
q1
q2 <- -2 + 1* -e(c(1,2)) - 2*-e(c(1,3)) + 1*-e(c(2,3))
q2
q1*q2
## ----clifftoquat--------------------------------------------------------------------------------------------
`clifford_to_quaternion` <- function(C){
C <- as.clifford(C)
tC <- disordR::elements(terms(C))
stopifnot(all(c(tC,recursive=TRUE) <= 3))
jj <- unlist(lapply(tC,length))
stopifnot(all(jj <= 2)) # safety check
stopifnot(all(jj%%2 == 0)) # safety check
out <- matrix(c(const(C), -getcoeffs(C,list(c(1,2),c(1,3),c(2,3)) )))
as.quaternion(out)
}
## ----defineqtoc---------------------------------------------------------------------------------------------
`quaternion_to_clifford` <- function(Q){
Q <- as.numeric(Q)
stopifnot(length(Q)==4)
clifford(list(numeric(0),c(1,2),c(1,3),c(2,3)),c(Q[1],-Q[2:4]))
}
## ----defqh--------------------------------------------------------------------------------------------------
q1 <- +1 + 2* -e(c(1,2)) + 3*-e(c(1,3)) + 4*-e(c(2,3))
q2 <- -2 + 1* -e(c(1,2)) - 2*-e(c(1,3)) + 1*-e(c(2,3))
H1 <- as.quaternion(c(3,-5,2,1),single=TRUE)
H2 <- as.quaternion(c(1,2,-2,2),single=TRUE)
## ----verifyinverse------------------------------------------------------------------------------------------
c( # check they are inverses of one another
q1 == quaternion_to_clifford(clifford_to_quaternion(q1)),
q2 == quaternion_to_clifford(clifford_to_quaternion(q2)),
H1 == clifford_to_quaternion(quaternion_to_clifford(H1)),
H2 == clifford_to_quaternion(quaternion_to_clifford(H2))
)
## -----------------------------------------------------------------------------------------------------------
c(
q1*q2 == quaternion_to_clifford(clifford_to_quaternion(q1)*clifford_to_quaternion(q2)),
H1*H2 == clifford_to_quaternion(quaternion_to_clifford(H1)*quaternion_to_clifford(H2))
)
## -----------------------------------------------------------------------------------------------------------
signature(0,3)
cliff2quat <- function(C){
out <- getcoeffs(C,list(numeric(0),c(2,3),c(1,3),c(1,2)))
out[2] <- -out[2]
as.quaternion(out,single=TRUE)
}
quat2cliff <- function(H){
jj <- c(as.matrix(H))
jj[2] <- -jj[2]
clifford(list(numeric(0),c(2,3),c(1,3),c(1,2)),jj)
}
## -----------------------------------------------------------------------------------------------------------
c(
cliff2quat(quat2cliff(H1)) == H1,
cliff2quat(quat2cliff(H2)) == H2,
quat2cliff(cliff2quat(q1)) == q1,
quat2cliff(cliff2quat(q2)) == q2,
cliff2quat(q1*q2) == cliff2quat(q1) * cliff2quat(q2),
quat2cliff(H1*H2) == quat2cliff(H1) * quat2cliff(H2)
)
## ----echo=FALSE---------------------------------------------------------------------------------------------
# restore default
options(maxdim = NULL)
signature(Inf)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.