40 result.X = value1.X + value2.
X;
41 result.Y = value1.Y + value2.
Y;
42 result.Z = value1.Z + value2.
Z;
43 result.W = value1.W + value2.
W;
53 float num = value2.X * value2.X + value2.Y * value2.Y + value2.Z * value2.Z + value2.W * value2.
W;
54 float num2 = 1f / num;
55 float num3 = (0f - value2.
X) * num2;
56 float num4 = (0f - value2.
Y) * num2;
57 float num5 = (0f - value2.
Z) * num2;
58 float num6 = value2.W * num2;
59 float num7 = y * num5 - z * num4;
60 float num8 = z * num3 - x * num5;
61 float num9 = x * num4 - y * num3;
62 float num10 = x * num3 + y * num4 + z * num5;
64 result.X = x * num6 + num3 * w + num7;
65 result.Y = y * num6 + num4 * w + num8;
66 result.Z = z * num6 + num5 * w + num9;
67 result.W = w * num6 - num10;
73 if (value1.
X == value2.
X && value1.
Y == value2.
Y && value1.
Z == value2.
Z)
75 return value1.W == value2.
W;
82 return !(value1 == value2);
95 float num = y * z2 - z * y2;
96 float num2 = z * x2 - x * z2;
97 float num3 = x * y2 - y * x2;
98 float num4 = x * x2 + y * y2 + z * z2;
100 result.X = x * w2 + x2 * w + num;
101 result.Y = y * w2 + y2 * w + num2;
102 result.Z = z * w2 + z2 * w + num3;
103 result.W = w * w2 - num4;
110 result.X = value1.X * value2;
111 result.Y = value1.Y * value2;
112 result.Z = value1.Z * value2;
113 result.W = value1.W * value2;
120 result.X = value1.X - value2.
X;
121 result.Y = value1.Y - value2.
Y;
122 result.Z = value1.Z - value2.
Z;
123 result.W = value1.W - value2.
W;
130 result.X = 0f -
value.X;
131 result.Y = 0f -
value.Y;
132 result.Z = 0f -
value.Z;
133 result.W = 0f -
value.W;
140 return value1 + value2;
153 float num = y * z2 - z * y2;
154 float num2 = z * x2 - x * z2;
155 float num3 = x * y2 - y * x2;
156 float num4 = x * x2 + y * y2 + z * z2;
158 result.X = x * w2 + x2 * w + num;
159 result.Y = y * w2 + y2 * w + num2;
160 result.Z = z * w2 + z2 * w + num3;
161 result.W = w * w2 - num4;
168 result.X = 0f -
value.X;
169 result.Y = 0f -
value.Y;
170 result.Z = 0f -
value.Z;
177 float x = angle * 0.5f;
181 result.X = axis.X * num;
182 result.Y = axis.Y * num;
183 result.Z = axis.Z * num;
190 float num = matrix.M11 + matrix.M22 + matrix.
M33;
195 result.W = num2 * 0.5f;
197 result.X = (matrix.M23 - matrix.
M32) * num2;
198 result.Y = (matrix.M31 - matrix.
M13) * num2;
199 result.Z = (matrix.M12 - matrix.
M21) * num2;
201 else if (matrix.
M11 >= matrix.
M22 && matrix.
M11 >= matrix.
M33)
204 float num4 = 0.5f / num3;
205 result.X = 0.5f * num3;
206 result.Y = (matrix.M12 + matrix.
M21) * num4;
207 result.Z = (matrix.M13 + matrix.
M31) * num4;
208 result.W = (matrix.M23 - matrix.
M32) * num4;
210 else if (matrix.
M22 > matrix.
M33)
213 float num6 = 0.5f / num5;
214 result.X = (matrix.M21 + matrix.
M12) * num6;
215 result.Y = 0.5f * num5;
216 result.Z = (matrix.M32 + matrix.
M23) * num6;
217 result.W = (matrix.M31 - matrix.
M13) * num6;
222 float num8 = 0.5f / num7;
223 result.X = (matrix.M31 + matrix.
M13) * num8;
224 result.Y = (matrix.M32 + matrix.
M23) * num8;
225 result.Z = 0.5f * num7;
226 result.W = (matrix.M12 - matrix.
M21) * num8;
233 float x = roll * 0.5f;
236 float x2 = pitch * 0.5f;
239 float x3 = yaw * 0.5f;
243 result.X = num6 * num3 * num2 + num5 * num4 * num;
244 result.Y = num5 * num4 * num2 - num6 * num3 * num;
245 result.Z = num6 * num4 * num - num5 * num3 * num2;
246 result.W = num6 * num4 * num2 + num5 * num3 * num;
253 return value1 / value2;
258 return quaternion1.X * quaternion2.X + quaternion1.Y * quaternion2.Y + quaternion1.Z * quaternion2.Z + quaternion1.W * quaternion2.
W;
263 float num = value.X * value.X + value.Y * value.Y + value.Z * value.Z + value.W *
value.W;
264 float num2 = 1f / num;
266 result.X = (0f -
value.X) * num2;
267 result.Y = (0f -
value.Y) * num2;
268 result.Z = (0f -
value.Z) * num2;
269 result.W = value.W * num2;
275 float num = 1f - amount;
277 float num2 = quaternion1.X * quaternion2.X + quaternion1.Y * quaternion2.Y + quaternion1.Z * quaternion2.Z + quaternion1.W * quaternion2.
W;
280 result.X = num * quaternion1.X + amount * quaternion2.
X;
281 result.Y = num * quaternion1.Y + amount * quaternion2.
Y;
282 result.Z = num * quaternion1.Z + amount * quaternion2.
Z;
283 result.W = num * quaternion1.W + amount * quaternion2.
W;
287 result.X = num * quaternion1.X - amount * quaternion2.
X;
288 result.Y = num * quaternion1.Y - amount * quaternion2.
Y;
289 result.Z = num * quaternion1.Z - amount * quaternion2.
Z;
290 result.W = num * quaternion1.W - amount * quaternion2.
W;
292 float x = result.X * result.X + result.Y * result.Y + result.Z * result.Z + result.W * result.
W;
304 return value1 * value2;
310 return value1 * value2;
321 float x = value.X * value.X + value.Y * value.Y + value.Z * value.Z + value.W *
value.W;
324 result.X = value.X * num;
325 result.Y = value.Y * num;
326 result.Z = value.Z * num;
327 result.W = value.W * num;
333 float num = quaternion1.X * quaternion2.X + quaternion1.Y * quaternion2.Y + quaternion1.Z * quaternion2.Z + quaternion1.W * quaternion2.
W;
345 num3 = (flag ? (0f - amount) : amount);
351 num2 =
MathF.
Sin((1f - amount) * num4) * num5;
352 num3 = (flag ? ((0f -
MathF.
Sin(amount * num4)) * num5) : (
MathF.
Sin(amount * num4) * num5));
355 result.X = num2 * quaternion1.X + num3 * quaternion2.
X;
356 result.Y = num2 * quaternion1.Y + num3 * quaternion2.
Y;
357 result.Z = num2 * quaternion1.Z + num3 * quaternion2.
Z;
358 result.W = num2 * quaternion1.W + num3 * quaternion2.
W;
365 return value1 - value2;
368 public override readonly
bool Equals([NotNullWhen(
true)]
object?
obj)
379 return this ==
other;
384 return X.GetHashCode() +
Y.GetHashCode() +
Z.GetHashCode() +
W.GetHashCode();
395 return X *
X +
Y *
Y +
Z *
Z +
W *
W;
400 return $
"{{X:{X} Y:{Y} Z:{Z} W:{W}}}";
static float Sqrt(float x)
static float Acos(float x)
static float Cos(float x)
static float Sin(float x)
static Quaternion Identity
static Quaternion CreateFromRotationMatrix(Matrix4x4 matrix)
static Quaternion Conjugate(Quaternion value)
static Quaternion operator-(Quaternion value1, Quaternion value2)
static Quaternion Slerp(Quaternion quaternion1, Quaternion quaternion2, float amount)
static Quaternion CreateFromAxisAngle(Vector3 axis, float angle)
static bool operator==(Quaternion value1, Quaternion value2)
static Quaternion operator+(Quaternion value1, Quaternion value2)
static Quaternion operator*(Quaternion value1, Quaternion value2)
static Quaternion Add(Quaternion value1, Quaternion value2)
static Quaternion Concatenate(Quaternion value1, Quaternion value2)
static Quaternion Multiply(Quaternion value1, Quaternion value2)
static Quaternion Inverse(Quaternion value)
override readonly bool Equals([NotNullWhen(true)] object? obj)
static bool operator!=(Quaternion value1, Quaternion value2)
static Quaternion operator/(Quaternion value1, Quaternion value2)
readonly float LengthSquared()
static Quaternion Lerp(Quaternion quaternion1, Quaternion quaternion2, float amount)
static Quaternion Multiply(Quaternion value1, float value2)
readonly bool Equals(Quaternion other)
static float Dot(Quaternion quaternion1, Quaternion quaternion2)
static Quaternion Normalize(Quaternion value)
Quaternion(Vector3 vectorPart, float scalarPart)
static Quaternion Subtract(Quaternion value1, Quaternion value2)
static Quaternion Divide(Quaternion value1, Quaternion value2)
Quaternion(float x, float y, float z, float w)
static Quaternion CreateFromYawPitchRoll(float yaw, float pitch, float roll)
override readonly int GetHashCode()
static Quaternion Negate(Quaternion value)
override readonly string ToString()