Quaternion

四元数

Constructors

this
this(Quaternion!E q)
Undocumented in source.
this
this(SCVector!(int, 4) m)
Undocumented in source.

Members

Aliases

a
alias a = s
Undocumented in source.
b
alias b = i
Undocumented in source.
c
alias c = j
Undocumented in source.
d
alias d = k
Undocumented in source.
w
alias w = a
Undocumented in source.
x
alias x = b
Undocumented in source.
y
alias y = c
Undocumented in source.
z
alias z = d
Undocumented in source.

Functions

i
inout(S) i()
Undocumented in source. Be warned that the author may not have intended to support it.
j
inout(S) j()
Undocumented in source. Be warned that the author may not have intended to support it.
k
inout(S) k()
Undocumented in source. Be warned that the author may not have intended to support it.
opAssign
void opAssign(Quaternion!E q)
Undocumented in source. Be warned that the author may not have intended to support it.
opAssign
void opAssign(E s)
Undocumented in source. Be warned that the author may not have intended to support it.
opBinary
Quaternion!(CommonType!(S, E)) opBinary(Quaternion!E q)
Undocumented in source. Be warned that the author may not have intended to support it.
opBinary
Quaternion!(CommonType!(S, E)) opBinary(Quaternion!E q)
Undocumented in source. Be warned that the author may not have intended to support it.
opBinary
Quaternion!(CommonType!(S, E)) opBinary(Quaternion!E q)
Undocumented in source. Be warned that the author may not have intended to support it.
opBinary
auto opBinary(Quaternion!E q)
Undocumented in source. Be warned that the author may not have intended to support it.
opBinary
Quaternion!(CommonType!(S, E)) opBinary(E s)
Undocumented in source. Be warned that the author may not have intended to support it.
opBinary
Quaternion!(CommonType!(S, E)) opBinary(E s)
Undocumented in source. Be warned that the author may not have intended to support it.
opBinary
Quaternion!(CommonType!(S, E)) opBinary(E s)
Undocumented in source. Be warned that the author may not have intended to support it.
opBinary
Quaternion!(CommonType!(S, E)) opBinary(E s)
Undocumented in source. Be warned that the author may not have intended to support it.
opBinary
Quaternion!(Select!(isFloatingPoint!S, S, real)) opBinary(Int n)
Undocumented in source. Be warned that the author may not have intended to support it.
opBinaryRight
Quaternion!(CommonType!(S, E)) opBinaryRight(E s)
Undocumented in source. Be warned that the author may not have intended to support it.
opBinaryRight
Quaternion!(CommonType!(S, E)) opBinaryRight(E s)
Undocumented in source. Be warned that the author may not have intended to support it.
opBinaryRight
Quaternion!(CommonType!(S, E)) opBinaryRight(E s)
Undocumented in source. Be warned that the author may not have intended to support it.
opBinaryRight
auto opBinaryRight(E s)
Undocumented in source. Be warned that the author may not have intended to support it.
opEquals
bool opEquals(Quaternion!E q)
Undocumented in source. Be warned that the author may not have intended to support it.
opIndex
inout(S) opIndex(size_t i)
opOpAssign
void opOpAssign(E s)
Undocumented in source. Be warned that the author may not have intended to support it.
opOpAssign
void opOpAssign(Quaternion!E q)
Undocumented in source. Be warned that the author may not have intended to support it.
opUnary
auto opUnary(Quaternion!E q)
Undocumented in source. Be warned that the author may not have intended to support it.
s
inout(S) s()
Undocumented in source. Be warned that the author may not have intended to support it.
toString
void toString(void delegate(const(char)[]) sink, string formatString)
Undocumented in source. Be warned that the author may not have intended to support it.

Properties

asVec4
V asVec4 [@property getter]
Undocumented in source. Be warned that the author may not have intended to support it.
v
auto v [@property getter]
Undocumented in source. Be warned that the author may not have intended to support it.
v
V v [@property setter]
Undocumented in source. Be warned that the author may not have intended to support it.

Examples

1 assert(Quaternion!int.init == quaternion(1, 0, 0, 0));
2 // 1 = [1; (0, 0, 0)]な四元数の作成
3 auto q = quaternion(1);
4 
5 // 添字によるアクセス
6 assert(q[0] == 1);
7 assert(q[1] == 0);
8 assert(q[2] == 0);
9 assert(q[3] == 0);
10 
11 
12 // 1 + 2i + 3j + 4k = [1; (2, 3, 4)]な四元数の作成
13 q = quaternion(1, 2, 3, 4);
14 assert(q[0] == 1);
15 assert(q[1] == 2);
16 assert(q[2] == 3);
17 assert(q[3] == 4);
18 
19 // a, b, c, dによるアクセス
20 assert(q.a == 1);
21 assert(q.b == 2);
22 assert(q.c == 3);
23 assert(q.d == 4);
24 
25 // スカラー部であるs, ベクトル部であるvによるアクセス
26 assert(q.s == 1);
27 assert(q.v == [2, 3, 4].matrix!(3, 1));
28 
29 // v = (i, j, k)
30 assert(q.i == 2);
31 assert(q.j == 3);
32 assert(q.k == 4);
33 
34 // opIndexやa, b, c, d, i, j, k, s, vへは代入可能
35 q.s = 7;
36 assert(q[0] == 7);
37 
38 // vはベクトルなので、ベクトルを代入可能
39 q.v = [4, 5, 6].matrix!(3, 1);
40 assert(q[1] == 4);
41 assert(q[2] == 5);
42 assert(q[3] == 6);
43 
44 // スカラー部とベクトル部による四元数の作成
45 q = quaternion(8, [9, 10, 11].matrix!(3, 1));
46 assert(q[0] == 8);
47 assert(q[1] == 9);
48 assert(q[2] == 10);
49 assert(q[3] == 11);
50 
51 
52 // 和
53 q = quaternion(1, 2, 3, 4) + quaternion(2, 2, 2, 2);
54 assert(q == quaternion(3, 4, 5, 6));
55 
56 q = q + 3;
57 assert(q == quaternion(6, 4, 5, 6));
58 
59 q = 3 + q;
60 assert(q == quaternion(9, 4, 5, 6));
61 
62 // 複合代入和
63 q += q;
64 assert(q == quaternion(18, 8, 10, 12));
65 
66 q += 3;
67 assert(q == quaternion(21, 8, 10, 12));
68 
69 
70 // 差
71 q = quaternion(1, 2, 3, 4) - quaternion(2, 2, 2, 2);
72 assert(q == quaternion(-1, 0, 1, 2));
73 
74 q = q - 3;
75 assert(q == quaternion(-4, 0, 1, 2));
76 
77 q = 3 - q;
78 assert(q == quaternion(7, 0, -1, -2));
79 
80 // 複合代入和
81 q -= q;
82 assert(q == quaternion(0, 0, 0, 0));
83 
84 q -= 3;
85 assert(q == quaternion(-3, 0, 0, 0));
86 
87 
88 // 積
89 q = quaternion(1, 2, 3, 4) * quaternion(7, 6, 7, 8);
90 assert(q == quaternion(-58, 16, 36, 32));
91 
92 q = quaternion(1, 2, 3, 4) * 4;
93 assert(q == quaternion(4, 8, 12, 16));
94 
95 q = 4 * quaternion(1, 2, 3, 4);
96 assert(q == quaternion(4, 8, 12, 16));
97 
98 q = quaternion(1, 2, 3, 4);
99 q *= quaternion(7, 6, 7, 8);
100 assert(q == quaternion(-58, 16, 36, 32));
101 
102 q = quaternion(1, 2, 3, 4);
103 q *= 4;
104 assert(q == quaternion(4, 8, 12, 16));
105 
106 
107 // 商
108 assert((quaternion(-58.0, 16, 36, 32) / quaternion(7, 6, 7, 8)).approxEqual(quaternion(1, 2, 3, 4)));
109 assert(quaternion(4.0, 8, 12, 16) / 4 == quaternion(1, 2, 3, 4));
110 assert((16.0 / quaternion(1.0, 2, 3, 4)).approxEqual(quaternion(16.0) / quaternion(1.0, 2, 3, 4)));
111 auto p = quaternion(-58.0, 16, 36, 32);
112 p /= quaternion(7, 6, 7, 8);
113 assert(p.approxEqual(quaternion(1, 2, 3, 4)));
114 
115 p = quaternion(4.0, 8, 12, 16);
116 p /= 4;
117 assert(p.approxEqual(quaternion(1, 2, 3, 4)));
118 
119 // 累乗
120 q = quaternion(1, 1, 2, 2);
121 p = q ^^ 3;
122 assert(approxEqual(p, q * q * q));
123 
124 p = q ^^ -3;
125 assert(approxEqual(p, q.inverse * q.inverse * q.inverse));
126 assert(approxEqual(q ^^ 3 * q ^^ -3, quaternion(1, 0, 0, 0)));

Meta