quaternion 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. .TH QUATERNION 2
  2. .SH NAME
  3. qtom, mtoq, qadd, qsub, qneg, qmul, qdiv, qunit, qinv, qlen, slerp, qmid, qsqrt \- Quaternion arithmetic
  4. .SH SYNOPSIS
  5. .PP
  6. .B
  7. #include <draw.h>
  8. .PP
  9. .B
  10. #include <geometry.h>
  11. .PP
  12. .B
  13. Quaternion qadd(Quaternion q, Quaternion r)
  14. .PP
  15. .B
  16. Quaternion qsub(Quaternion q, Quaternion r)
  17. .PP
  18. .B
  19. Quaternion qneg(Quaternion q)
  20. .PP
  21. .B
  22. Quaternion qmul(Quaternion q, Quaternion r)
  23. .PP
  24. .B
  25. Quaternion qdiv(Quaternion q, Quaternion r)
  26. .PP
  27. .B
  28. Quaternion qinv(Quaternion q)
  29. .PP
  30. .B
  31. double qlen(Quaternion p)
  32. .PP
  33. .B
  34. Quaternion qunit(Quaternion q)
  35. .PP
  36. .B
  37. void qtom(Matrix m, Quaternion q)
  38. .PP
  39. .B
  40. Quaternion mtoq(Matrix mat)
  41. .PP
  42. .B
  43. Quaternion slerp(Quaternion q, Quaternion r, double a)
  44. .PP
  45. .B
  46. Quaternion qmid(Quaternion q, Quaternion r)
  47. .PP
  48. .B
  49. Quaternion qsqrt(Quaternion q)
  50. .SH DESCRIPTION
  51. The Quaternions are a non-commutative extension field of the Real numbers, designed
  52. to do for rotations in 3-space what the complex numbers do for rotations in 2-space.
  53. Quaternions have a real component
  54. .I r
  55. and an imaginary vector component \fIv\fP=(\fIi\fP,\fIj\fP,\fIk\fP).
  56. Quaternions add componentwise and multiply according to the rule
  57. (\fIr\fP,\fIv\fP)(\fIs\fP,\fIw\fP)=(\fIrs\fP-\fIv\fP\v'-.3m'.\v'.3m'\fIw\fP, \fIrw\fP+\fIvs\fP+\fIv\fP×\fIw\fP),
  58. where \v'-.3m'.\v'.3m' and × are the ordinary vector dot and cross products.
  59. The multiplicative inverse of a non-zero quaternion (\fIr\fP,\fIv\fP)
  60. is (\fIr\fP,\fI-v\fP)/(\fIr\^\fP\u\s-22\s+2\d-\fIv\fP\v'-.3m'.\v'.3m'\fIv\fP).
  61. .PP
  62. The following routines do arithmetic on quaternions, represented as
  63. .IP
  64. .EX
  65. .ta 6n
  66. typedef struct Quaternion Quaternion;
  67. struct Quaternion{
  68. double r, i, j, k;
  69. };
  70. .EE
  71. .TF qunit
  72. .TP
  73. Name
  74. Description
  75. .TP
  76. .B qadd
  77. Add two quaternions.
  78. .TP
  79. .B qsub
  80. Subtract two quaternions.
  81. .TP
  82. .B qneg
  83. Negate a quaternion.
  84. .TP
  85. .B qmul
  86. Multiply two quaternions.
  87. .TP
  88. .B qdiv
  89. Divide two quaternions.
  90. .TP
  91. .B qinv
  92. Return the multiplicative inverse of a quaternion.
  93. .TP
  94. .B qlen
  95. Return
  96. .BR sqrt(q.r*q.r+q.i*q.i+q.j*q.j+q.k*q.k) ,
  97. the length of a quaternion.
  98. .TP
  99. .B qunit
  100. Return a unit quaternion
  101. .RI ( length=1 )
  102. with components proportional to
  103. .IR q 's.
  104. .PD
  105. .PP
  106. A rotation by angle \fIθ\fP about axis
  107. .I A
  108. (where
  109. .I A
  110. is a unit vector) can be represented by
  111. the unit quaternion \fIq\fP=(cos \fIθ\fP/2, \fIA\fPsin \fIθ\fP/2).
  112. The same rotation is represented by \(mi\fIq\fP; a rotation by \(mi\fIθ\fP about \(mi\fIA\fP is the same as a rotation by \fIθ\fP about \fIA\fP.
  113. The quaternion \fIq\fP transforms points by
  114. (0,\fIx',y',z'\fP) = \%\fIq\fP\u\s-2-1\s+2\d(0,\fIx,y,z\fP)\fIq\fP.
  115. Quaternion multiplication composes rotations.
  116. The orientation of an object in 3-space can be represented by a quaternion
  117. giving its rotation relative to some `standard' orientation.
  118. .PP
  119. The following routines operate on rotations or orientations represented as unit quaternions:
  120. .TF slerp
  121. .TP
  122. .B mtoq
  123. Convert a rotation matrix (see
  124. .IR matrix (2))
  125. to a unit quaternion.
  126. .TP
  127. .B qtom
  128. Convert a unit quaternion to a rotation matrix.
  129. .TP
  130. .B slerp
  131. Spherical lerp. Interpolate between two orientations.
  132. The rotation that carries
  133. .I q
  134. to
  135. .I r
  136. is \%\fIq\fP\u\s-2-1\s+2\d\fIr\fP, so
  137. .B slerp(q, r, t)
  138. is \fIq\fP(\fIq\fP\u\s-2-1\s+2\d\fIr\fP)\u\s-2\fIt\fP\s+2\d.
  139. .TP
  140. .B qmid
  141. .B slerp(q, r, .5)
  142. .TP
  143. .B qsqrt
  144. The square root of
  145. .IR q .
  146. This is just a rotation about the same axis by half the angle.
  147. .PD
  148. .SH SOURCE
  149. .B /sys/src/libgeometry/quaternion.c
  150. .SH SEE ALSO
  151. .IR matrix (2),
  152. .IR qball (2)