Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
Vector4.cs
Go to the documentation of this file.
1using System;
5using Microsoft.Xna.Framework.Design;
6
8
10[TypeConverter(typeof(Vector4Converter))]
11public struct Vector4 : IEquatable<Vector4>
12{
13 [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
14 public float X;
15
16 [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
17 public float Y;
18
19 [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
20 public float Z;
21
22 [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
23 public float W;
24
25 private static Vector4 _zero = default(Vector4);
26
27 private static Vector4 _one = new Vector4(1f, 1f, 1f, 1f);
28
29 private static Vector4 _unitX = new Vector4(1f, 0f, 0f, 0f);
30
31 private static Vector4 _unitY = new Vector4(0f, 1f, 0f, 0f);
32
33 private static Vector4 _unitZ = new Vector4(0f, 0f, 1f, 0f);
34
35 private static Vector4 _unitW = new Vector4(0f, 0f, 0f, 1f);
36
37 public static Vector4 Zero => _zero;
38
39 public static Vector4 One => _one;
40
41 public static Vector4 UnitX => _unitX;
42
43 public static Vector4 UnitY => _unitY;
44
45 public static Vector4 UnitZ => _unitZ;
46
47 public static Vector4 UnitW => _unitW;
48
49 public Vector4(float x, float y, float z, float w)
50 {
51 X = x;
52 Y = y;
53 Z = z;
54 W = w;
55 }
56
57 public Vector4(Vector2 value, float z, float w)
58 {
59 X = value.X;
60 Y = value.Y;
61 Z = z;
62 W = w;
63 }
64
65 public Vector4(Vector3 value, float w)
66 {
67 X = value.X;
68 Y = value.Y;
69 Z = value.Z;
70 W = w;
71 }
72
73 public Vector4(float value)
74 {
75 X = (Y = (Z = (W = value)));
76 }
77
78 public override string ToString()
79 {
80 CultureInfo currentCulture = CultureInfo.CurrentCulture;
81 return string.Format(currentCulture, "{{X:{0} Y:{1} Z:{2} W:{3}}}", X.ToString(currentCulture), Y.ToString(currentCulture), Z.ToString(currentCulture), W.ToString(currentCulture));
82 }
83
84 public bool Equals(Vector4 other)
85 {
86 if (X == other.X && Y == other.Y && Z == other.Z)
87 {
88 return W == other.W;
89 }
90 return false;
91 }
92
93 public override bool Equals(object obj)
94 {
95 bool result = false;
96 if (obj is Vector4)
97 {
98 result = Equals((Vector4)obj);
99 }
100 return result;
101 }
102
103 public override int GetHashCode()
104 {
105 return X.GetHashCode() + Y.GetHashCode() + Z.GetHashCode() + W.GetHashCode();
106 }
107
108 public float Length()
109 {
110 float num = X * X + Y * Y + Z * Z + W * W;
111 return (float)Math.Sqrt(num);
112 }
113
114 public float LengthSquared()
115 {
116 return X * X + Y * Y + Z * Z + W * W;
117 }
118
119 public static float Distance(Vector4 value1, Vector4 value2)
120 {
121 float num = value1.X - value2.X;
122 float num2 = value1.Y - value2.Y;
123 float num3 = value1.Z - value2.Z;
124 float num4 = value1.W - value2.W;
125 float num5 = num * num + num2 * num2 + num3 * num3 + num4 * num4;
126 return (float)Math.Sqrt(num5);
127 }
128
129 public static void Distance(ref Vector4 value1, ref Vector4 value2, out float result)
130 {
131 float num = value1.X - value2.X;
132 float num2 = value1.Y - value2.Y;
133 float num3 = value1.Z - value2.Z;
134 float num4 = value1.W - value2.W;
135 float num5 = num * num + num2 * num2 + num3 * num3 + num4 * num4;
136 result = (float)Math.Sqrt(num5);
137 }
138
139 public static float DistanceSquared(Vector4 value1, Vector4 value2)
140 {
141 float num = value1.X - value2.X;
142 float num2 = value1.Y - value2.Y;
143 float num3 = value1.Z - value2.Z;
144 float num4 = value1.W - value2.W;
145 return num * num + num2 * num2 + num3 * num3 + num4 * num4;
146 }
147
148 public static void DistanceSquared(ref Vector4 value1, ref Vector4 value2, out float result)
149 {
150 float num = value1.X - value2.X;
151 float num2 = value1.Y - value2.Y;
152 float num3 = value1.Z - value2.Z;
153 float num4 = value1.W - value2.W;
154 result = num * num + num2 * num2 + num3 * num3 + num4 * num4;
155 }
156
157 public static float Dot(Vector4 vector1, Vector4 vector2)
158 {
159 return vector1.X * vector2.X + vector1.Y * vector2.Y + vector1.Z * vector2.Z + vector1.W * vector2.W;
160 }
161
162 public static void Dot(ref Vector4 vector1, ref Vector4 vector2, out float result)
163 {
164 result = vector1.X * vector2.X + vector1.Y * vector2.Y + vector1.Z * vector2.Z + vector1.W * vector2.W;
165 }
166
167 public void Normalize()
168 {
169 float num = X * X + Y * Y + Z * Z + W * W;
170 float num2 = 1f / (float)Math.Sqrt(num);
171 X *= num2;
172 Y *= num2;
173 Z *= num2;
174 W *= num2;
175 }
176
177 public static Vector4 Normalize(Vector4 vector)
178 {
179 float num = vector.X * vector.X + vector.Y * vector.Y + vector.Z * vector.Z + vector.W * vector.W;
180 float num2 = 1f / (float)Math.Sqrt(num);
181 Vector4 result = default(Vector4);
182 result.X = vector.X * num2;
183 result.Y = vector.Y * num2;
184 result.Z = vector.Z * num2;
185 result.W = vector.W * num2;
186 return result;
187 }
188
189 public static void Normalize(ref Vector4 vector, out Vector4 result)
190 {
191 float num = vector.X * vector.X + vector.Y * vector.Y + vector.Z * vector.Z + vector.W * vector.W;
192 float num2 = 1f / (float)Math.Sqrt(num);
193 result.X = vector.X * num2;
194 result.Y = vector.Y * num2;
195 result.Z = vector.Z * num2;
196 result.W = vector.W * num2;
197 }
198
199 public static Vector4 Min(Vector4 value1, Vector4 value2)
200 {
201 Vector4 result = default(Vector4);
202 result.X = ((value1.X < value2.X) ? value1.X : value2.X);
203 result.Y = ((value1.Y < value2.Y) ? value1.Y : value2.Y);
204 result.Z = ((value1.Z < value2.Z) ? value1.Z : value2.Z);
205 result.W = ((value1.W < value2.W) ? value1.W : value2.W);
206 return result;
207 }
208
209 public static void Min(ref Vector4 value1, ref Vector4 value2, out Vector4 result)
210 {
211 result.X = ((value1.X < value2.X) ? value1.X : value2.X);
212 result.Y = ((value1.Y < value2.Y) ? value1.Y : value2.Y);
213 result.Z = ((value1.Z < value2.Z) ? value1.Z : value2.Z);
214 result.W = ((value1.W < value2.W) ? value1.W : value2.W);
215 }
216
217 public static Vector4 Max(Vector4 value1, Vector4 value2)
218 {
219 Vector4 result = default(Vector4);
220 result.X = ((value1.X > value2.X) ? value1.X : value2.X);
221 result.Y = ((value1.Y > value2.Y) ? value1.Y : value2.Y);
222 result.Z = ((value1.Z > value2.Z) ? value1.Z : value2.Z);
223 result.W = ((value1.W > value2.W) ? value1.W : value2.W);
224 return result;
225 }
226
227 public static void Max(ref Vector4 value1, ref Vector4 value2, out Vector4 result)
228 {
229 result.X = ((value1.X > value2.X) ? value1.X : value2.X);
230 result.Y = ((value1.Y > value2.Y) ? value1.Y : value2.Y);
231 result.Z = ((value1.Z > value2.Z) ? value1.Z : value2.Z);
232 result.W = ((value1.W > value2.W) ? value1.W : value2.W);
233 }
234
235 public static Vector4 Clamp(Vector4 value1, Vector4 min, Vector4 max)
236 {
237 float x = value1.X;
238 x = ((x > max.X) ? max.X : x);
239 x = ((x < min.X) ? min.X : x);
240 float y = value1.Y;
241 y = ((y > max.Y) ? max.Y : y);
242 y = ((y < min.Y) ? min.Y : y);
243 float z = value1.Z;
244 z = ((z > max.Z) ? max.Z : z);
245 z = ((z < min.Z) ? min.Z : z);
246 float w = value1.W;
247 w = ((w > max.W) ? max.W : w);
248 w = ((w < min.W) ? min.W : w);
249 Vector4 result = default(Vector4);
250 result.X = x;
251 result.Y = y;
252 result.Z = z;
253 result.W = w;
254 return result;
255 }
256
257 public static void Clamp(ref Vector4 value1, ref Vector4 min, ref Vector4 max, out Vector4 result)
258 {
259 float x = value1.X;
260 x = ((x > max.X) ? max.X : x);
261 x = ((x < min.X) ? min.X : x);
262 float y = value1.Y;
263 y = ((y > max.Y) ? max.Y : y);
264 y = ((y < min.Y) ? min.Y : y);
265 float z = value1.Z;
266 z = ((z > max.Z) ? max.Z : z);
267 z = ((z < min.Z) ? min.Z : z);
268 float w = value1.W;
269 w = ((w > max.W) ? max.W : w);
270 w = ((w < min.W) ? min.W : w);
271 result.X = x;
272 result.Y = y;
273 result.Z = z;
274 result.W = w;
275 }
276
277 public static Vector4 Lerp(Vector4 value1, Vector4 value2, float amount)
278 {
279 Vector4 result = default(Vector4);
280 result.X = value1.X + (value2.X - value1.X) * amount;
281 result.Y = value1.Y + (value2.Y - value1.Y) * amount;
282 result.Z = value1.Z + (value2.Z - value1.Z) * amount;
283 result.W = value1.W + (value2.W - value1.W) * amount;
284 return result;
285 }
286
287 public static void Lerp(ref Vector4 value1, ref Vector4 value2, float amount, out Vector4 result)
288 {
289 result.X = value1.X + (value2.X - value1.X) * amount;
290 result.Y = value1.Y + (value2.Y - value1.Y) * amount;
291 result.Z = value1.Z + (value2.Z - value1.Z) * amount;
292 result.W = value1.W + (value2.W - value1.W) * amount;
293 }
294
295 public static Vector4 Barycentric(Vector4 value1, Vector4 value2, Vector4 value3, float amount1, float amount2)
296 {
297 Vector4 result = default(Vector4);
298 result.X = value1.X + amount1 * (value2.X - value1.X) + amount2 * (value3.X - value1.X);
299 result.Y = value1.Y + amount1 * (value2.Y - value1.Y) + amount2 * (value3.Y - value1.Y);
300 result.Z = value1.Z + amount1 * (value2.Z - value1.Z) + amount2 * (value3.Z - value1.Z);
301 result.W = value1.W + amount1 * (value2.W - value1.W) + amount2 * (value3.W - value1.W);
302 return result;
303 }
304
305 public static void Barycentric(ref Vector4 value1, ref Vector4 value2, ref Vector4 value3, float amount1, float amount2, out Vector4 result)
306 {
307 result.X = value1.X + amount1 * (value2.X - value1.X) + amount2 * (value3.X - value1.X);
308 result.Y = value1.Y + amount1 * (value2.Y - value1.Y) + amount2 * (value3.Y - value1.Y);
309 result.Z = value1.Z + amount1 * (value2.Z - value1.Z) + amount2 * (value3.Z - value1.Z);
310 result.W = value1.W + amount1 * (value2.W - value1.W) + amount2 * (value3.W - value1.W);
311 }
312
313 public static Vector4 SmoothStep(Vector4 value1, Vector4 value2, float amount)
314 {
315 amount = ((amount > 1f) ? 1f : ((amount < 0f) ? 0f : amount));
316 amount = amount * amount * (3f - 2f * amount);
317 Vector4 result = default(Vector4);
318 result.X = value1.X + (value2.X - value1.X) * amount;
319 result.Y = value1.Y + (value2.Y - value1.Y) * amount;
320 result.Z = value1.Z + (value2.Z - value1.Z) * amount;
321 result.W = value1.W + (value2.W - value1.W) * amount;
322 return result;
323 }
324
325 public static void SmoothStep(ref Vector4 value1, ref Vector4 value2, float amount, out Vector4 result)
326 {
327 amount = ((amount > 1f) ? 1f : ((amount < 0f) ? 0f : amount));
328 amount = amount * amount * (3f - 2f * amount);
329 result.X = value1.X + (value2.X - value1.X) * amount;
330 result.Y = value1.Y + (value2.Y - value1.Y) * amount;
331 result.Z = value1.Z + (value2.Z - value1.Z) * amount;
332 result.W = value1.W + (value2.W - value1.W) * amount;
333 }
334
335 public static Vector4 CatmullRom(Vector4 value1, Vector4 value2, Vector4 value3, Vector4 value4, float amount)
336 {
337 float num = amount * amount;
338 float num2 = amount * num;
339 Vector4 result = default(Vector4);
340 result.X = 0.5f * (2f * value2.X + (0f - value1.X + value3.X) * amount + (2f * value1.X - 5f * value2.X + 4f * value3.X - value4.X) * num + (0f - value1.X + 3f * value2.X - 3f * value3.X + value4.X) * num2);
341 result.Y = 0.5f * (2f * value2.Y + (0f - value1.Y + value3.Y) * amount + (2f * value1.Y - 5f * value2.Y + 4f * value3.Y - value4.Y) * num + (0f - value1.Y + 3f * value2.Y - 3f * value3.Y + value4.Y) * num2);
342 result.Z = 0.5f * (2f * value2.Z + (0f - value1.Z + value3.Z) * amount + (2f * value1.Z - 5f * value2.Z + 4f * value3.Z - value4.Z) * num + (0f - value1.Z + 3f * value2.Z - 3f * value3.Z + value4.Z) * num2);
343 result.W = 0.5f * (2f * value2.W + (0f - value1.W + value3.W) * amount + (2f * value1.W - 5f * value2.W + 4f * value3.W - value4.W) * num + (0f - value1.W + 3f * value2.W - 3f * value3.W + value4.W) * num2);
344 return result;
345 }
346
347 public static void CatmullRom(ref Vector4 value1, ref Vector4 value2, ref Vector4 value3, ref Vector4 value4, float amount, out Vector4 result)
348 {
349 float num = amount * amount;
350 float num2 = amount * num;
351 result.X = 0.5f * (2f * value2.X + (0f - value1.X + value3.X) * amount + (2f * value1.X - 5f * value2.X + 4f * value3.X - value4.X) * num + (0f - value1.X + 3f * value2.X - 3f * value3.X + value4.X) * num2);
352 result.Y = 0.5f * (2f * value2.Y + (0f - value1.Y + value3.Y) * amount + (2f * value1.Y - 5f * value2.Y + 4f * value3.Y - value4.Y) * num + (0f - value1.Y + 3f * value2.Y - 3f * value3.Y + value4.Y) * num2);
353 result.Z = 0.5f * (2f * value2.Z + (0f - value1.Z + value3.Z) * amount + (2f * value1.Z - 5f * value2.Z + 4f * value3.Z - value4.Z) * num + (0f - value1.Z + 3f * value2.Z - 3f * value3.Z + value4.Z) * num2);
354 result.W = 0.5f * (2f * value2.W + (0f - value1.W + value3.W) * amount + (2f * value1.W - 5f * value2.W + 4f * value3.W - value4.W) * num + (0f - value1.W + 3f * value2.W - 3f * value3.W + value4.W) * num2);
355 }
356
357 public static Vector4 Hermite(Vector4 value1, Vector4 tangent1, Vector4 value2, Vector4 tangent2, float amount)
358 {
359 float num = amount * amount;
360 float num2 = amount * num;
361 float num3 = 2f * num2 - 3f * num + 1f;
362 float num4 = -2f * num2 + 3f * num;
363 float num5 = num2 - 2f * num + amount;
364 float num6 = num2 - num;
365 Vector4 result = default(Vector4);
366 result.X = value1.X * num3 + value2.X * num4 + tangent1.X * num5 + tangent2.X * num6;
367 result.Y = value1.Y * num3 + value2.Y * num4 + tangent1.Y * num5 + tangent2.Y * num6;
368 result.Z = value1.Z * num3 + value2.Z * num4 + tangent1.Z * num5 + tangent2.Z * num6;
369 result.W = value1.W * num3 + value2.W * num4 + tangent1.W * num5 + tangent2.W * num6;
370 return result;
371 }
372
373 public static void Hermite(ref Vector4 value1, ref Vector4 tangent1, ref Vector4 value2, ref Vector4 tangent2, float amount, out Vector4 result)
374 {
375 float num = amount * amount;
376 float num2 = amount * num;
377 float num3 = 2f * num2 - 3f * num + 1f;
378 float num4 = -2f * num2 + 3f * num;
379 float num5 = num2 - 2f * num + amount;
380 float num6 = num2 - num;
381 result.X = value1.X * num3 + value2.X * num4 + tangent1.X * num5 + tangent2.X * num6;
382 result.Y = value1.Y * num3 + value2.Y * num4 + tangent1.Y * num5 + tangent2.Y * num6;
383 result.Z = value1.Z * num3 + value2.Z * num4 + tangent1.Z * num5 + tangent2.Z * num6;
384 result.W = value1.W * num3 + value2.W * num4 + tangent1.W * num5 + tangent2.W * num6;
385 }
386
387 public static Vector4 Transform(Vector2 position, Matrix matrix)
388 {
389 float x = position.X * matrix.M11 + position.Y * matrix.M21 + matrix.M41;
390 float y = position.X * matrix.M12 + position.Y * matrix.M22 + matrix.M42;
391 float z = position.X * matrix.M13 + position.Y * matrix.M23 + matrix.M43;
392 float w = position.X * matrix.M14 + position.Y * matrix.M24 + matrix.M44;
393 Vector4 result = default(Vector4);
394 result.X = x;
395 result.Y = y;
396 result.Z = z;
397 result.W = w;
398 return result;
399 }
400
401 public static void Transform(ref Vector2 position, ref Matrix matrix, out Vector4 result)
402 {
403 float x = position.X * matrix.M11 + position.Y * matrix.M21 + matrix.M41;
404 float y = position.X * matrix.M12 + position.Y * matrix.M22 + matrix.M42;
405 float z = position.X * matrix.M13 + position.Y * matrix.M23 + matrix.M43;
406 float w = position.X * matrix.M14 + position.Y * matrix.M24 + matrix.M44;
407 result.X = x;
408 result.Y = y;
409 result.Z = z;
410 result.W = w;
411 }
412
413 public static Vector4 Transform(Vector3 position, Matrix matrix)
414 {
415 float x = position.X * matrix.M11 + position.Y * matrix.M21 + position.Z * matrix.M31 + matrix.M41;
416 float y = position.X * matrix.M12 + position.Y * matrix.M22 + position.Z * matrix.M32 + matrix.M42;
417 float z = position.X * matrix.M13 + position.Y * matrix.M23 + position.Z * matrix.M33 + matrix.M43;
418 float w = position.X * matrix.M14 + position.Y * matrix.M24 + position.Z * matrix.M34 + matrix.M44;
419 Vector4 result = default(Vector4);
420 result.X = x;
421 result.Y = y;
422 result.Z = z;
423 result.W = w;
424 return result;
425 }
426
427 public static void Transform(ref Vector3 position, ref Matrix matrix, out Vector4 result)
428 {
429 float x = position.X * matrix.M11 + position.Y * matrix.M21 + position.Z * matrix.M31 + matrix.M41;
430 float y = position.X * matrix.M12 + position.Y * matrix.M22 + position.Z * matrix.M32 + matrix.M42;
431 float z = position.X * matrix.M13 + position.Y * matrix.M23 + position.Z * matrix.M33 + matrix.M43;
432 float w = position.X * matrix.M14 + position.Y * matrix.M24 + position.Z * matrix.M34 + matrix.M44;
433 result.X = x;
434 result.Y = y;
435 result.Z = z;
436 result.W = w;
437 }
438
439 public static Vector4 Transform(Vector4 vector, Matrix matrix)
440 {
441 float x = vector.X * matrix.M11 + vector.Y * matrix.M21 + vector.Z * matrix.M31 + vector.W * matrix.M41;
442 float y = vector.X * matrix.M12 + vector.Y * matrix.M22 + vector.Z * matrix.M32 + vector.W * matrix.M42;
443 float z = vector.X * matrix.M13 + vector.Y * matrix.M23 + vector.Z * matrix.M33 + vector.W * matrix.M43;
444 float w = vector.X * matrix.M14 + vector.Y * matrix.M24 + vector.Z * matrix.M34 + vector.W * matrix.M44;
445 Vector4 result = default(Vector4);
446 result.X = x;
447 result.Y = y;
448 result.Z = z;
449 result.W = w;
450 return result;
451 }
452
453 public static void Transform(ref Vector4 vector, ref Matrix matrix, out Vector4 result)
454 {
455 float x = vector.X * matrix.M11 + vector.Y * matrix.M21 + vector.Z * matrix.M31 + vector.W * matrix.M41;
456 float y = vector.X * matrix.M12 + vector.Y * matrix.M22 + vector.Z * matrix.M32 + vector.W * matrix.M42;
457 float z = vector.X * matrix.M13 + vector.Y * matrix.M23 + vector.Z * matrix.M33 + vector.W * matrix.M43;
458 float w = vector.X * matrix.M14 + vector.Y * matrix.M24 + vector.Z * matrix.M34 + vector.W * matrix.M44;
459 result.X = x;
460 result.Y = y;
461 result.Z = z;
462 result.W = w;
463 }
464
465 public static Vector4 Transform(Vector2 value, Quaternion rotation)
466 {
467 float num = rotation.X + rotation.X;
468 float num2 = rotation.Y + rotation.Y;
469 float num3 = rotation.Z + rotation.Z;
470 float num4 = rotation.W * num;
471 float num5 = rotation.W * num2;
472 float num6 = rotation.W * num3;
473 float num7 = rotation.X * num;
474 float num8 = rotation.X * num2;
475 float num9 = rotation.X * num3;
476 float num10 = rotation.Y * num2;
477 float num11 = rotation.Y * num3;
478 float num12 = rotation.Z * num3;
479 float x = value.X * (1f - num10 - num12) + value.Y * (num8 - num6);
480 float y = value.X * (num8 + num6) + value.Y * (1f - num7 - num12);
481 float z = value.X * (num9 - num5) + value.Y * (num11 + num4);
482 Vector4 result = default(Vector4);
483 result.X = x;
484 result.Y = y;
485 result.Z = z;
486 result.W = 1f;
487 return result;
488 }
489
490 public static void Transform(ref Vector2 value, ref Quaternion rotation, out Vector4 result)
491 {
492 float num = rotation.X + rotation.X;
493 float num2 = rotation.Y + rotation.Y;
494 float num3 = rotation.Z + rotation.Z;
495 float num4 = rotation.W * num;
496 float num5 = rotation.W * num2;
497 float num6 = rotation.W * num3;
498 float num7 = rotation.X * num;
499 float num8 = rotation.X * num2;
500 float num9 = rotation.X * num3;
501 float num10 = rotation.Y * num2;
502 float num11 = rotation.Y * num3;
503 float num12 = rotation.Z * num3;
504 float x = value.X * (1f - num10 - num12) + value.Y * (num8 - num6);
505 float y = value.X * (num8 + num6) + value.Y * (1f - num7 - num12);
506 float z = value.X * (num9 - num5) + value.Y * (num11 + num4);
507 result.X = x;
508 result.Y = y;
509 result.Z = z;
510 result.W = 1f;
511 }
512
513 public static Vector4 Transform(Vector3 value, Quaternion rotation)
514 {
515 float num = rotation.X + rotation.X;
516 float num2 = rotation.Y + rotation.Y;
517 float num3 = rotation.Z + rotation.Z;
518 float num4 = rotation.W * num;
519 float num5 = rotation.W * num2;
520 float num6 = rotation.W * num3;
521 float num7 = rotation.X * num;
522 float num8 = rotation.X * num2;
523 float num9 = rotation.X * num3;
524 float num10 = rotation.Y * num2;
525 float num11 = rotation.Y * num3;
526 float num12 = rotation.Z * num3;
527 float x = value.X * (1f - num10 - num12) + value.Y * (num8 - num6) + value.Z * (num9 + num5);
528 float y = value.X * (num8 + num6) + value.Y * (1f - num7 - num12) + value.Z * (num11 - num4);
529 float z = value.X * (num9 - num5) + value.Y * (num11 + num4) + value.Z * (1f - num7 - num10);
530 Vector4 result = default(Vector4);
531 result.X = x;
532 result.Y = y;
533 result.Z = z;
534 result.W = 1f;
535 return result;
536 }
537
538 public static void Transform(ref Vector3 value, ref Quaternion rotation, out Vector4 result)
539 {
540 float num = rotation.X + rotation.X;
541 float num2 = rotation.Y + rotation.Y;
542 float num3 = rotation.Z + rotation.Z;
543 float num4 = rotation.W * num;
544 float num5 = rotation.W * num2;
545 float num6 = rotation.W * num3;
546 float num7 = rotation.X * num;
547 float num8 = rotation.X * num2;
548 float num9 = rotation.X * num3;
549 float num10 = rotation.Y * num2;
550 float num11 = rotation.Y * num3;
551 float num12 = rotation.Z * num3;
552 float x = value.X * (1f - num10 - num12) + value.Y * (num8 - num6) + value.Z * (num9 + num5);
553 float y = value.X * (num8 + num6) + value.Y * (1f - num7 - num12) + value.Z * (num11 - num4);
554 float z = value.X * (num9 - num5) + value.Y * (num11 + num4) + value.Z * (1f - num7 - num10);
555 result.X = x;
556 result.Y = y;
557 result.Z = z;
558 result.W = 1f;
559 }
560
561 public static Vector4 Transform(Vector4 value, Quaternion rotation)
562 {
563 float num = rotation.X + rotation.X;
564 float num2 = rotation.Y + rotation.Y;
565 float num3 = rotation.Z + rotation.Z;
566 float num4 = rotation.W * num;
567 float num5 = rotation.W * num2;
568 float num6 = rotation.W * num3;
569 float num7 = rotation.X * num;
570 float num8 = rotation.X * num2;
571 float num9 = rotation.X * num3;
572 float num10 = rotation.Y * num2;
573 float num11 = rotation.Y * num3;
574 float num12 = rotation.Z * num3;
575 float x = value.X * (1f - num10 - num12) + value.Y * (num8 - num6) + value.Z * (num9 + num5);
576 float y = value.X * (num8 + num6) + value.Y * (1f - num7 - num12) + value.Z * (num11 - num4);
577 float z = value.X * (num9 - num5) + value.Y * (num11 + num4) + value.Z * (1f - num7 - num10);
578 Vector4 result = default(Vector4);
579 result.X = x;
580 result.Y = y;
581 result.Z = z;
582 result.W = value.W;
583 return result;
584 }
585
586 public static void Transform(ref Vector4 value, ref Quaternion rotation, out Vector4 result)
587 {
588 float num = rotation.X + rotation.X;
589 float num2 = rotation.Y + rotation.Y;
590 float num3 = rotation.Z + rotation.Z;
591 float num4 = rotation.W * num;
592 float num5 = rotation.W * num2;
593 float num6 = rotation.W * num3;
594 float num7 = rotation.X * num;
595 float num8 = rotation.X * num2;
596 float num9 = rotation.X * num3;
597 float num10 = rotation.Y * num2;
598 float num11 = rotation.Y * num3;
599 float num12 = rotation.Z * num3;
600 float x = value.X * (1f - num10 - num12) + value.Y * (num8 - num6) + value.Z * (num9 + num5);
601 float y = value.X * (num8 + num6) + value.Y * (1f - num7 - num12) + value.Z * (num11 - num4);
602 float z = value.X * (num9 - num5) + value.Y * (num11 + num4) + value.Z * (1f - num7 - num10);
603 result.X = x;
604 result.Y = y;
605 result.Z = z;
606 result.W = value.W;
607 }
608
609 public static void Transform(Vector4[] sourceArray, ref Matrix matrix, Vector4[] destinationArray)
610 {
611 if (sourceArray == null)
612 {
613 throw new ArgumentNullException("sourceArray");
614 }
615 if (destinationArray == null)
616 {
617 throw new ArgumentNullException("destinationArray");
618 }
619 if (destinationArray.Length < sourceArray.Length)
620 {
622 }
623 for (int i = 0; i < sourceArray.Length; i++)
624 {
625 float x = sourceArray[i].X;
626 float y = sourceArray[i].Y;
627 float z = sourceArray[i].Z;
628 float w = sourceArray[i].W;
629 destinationArray[i].X = x * matrix.M11 + y * matrix.M21 + z * matrix.M31 + w * matrix.M41;
630 destinationArray[i].Y = x * matrix.M12 + y * matrix.M22 + z * matrix.M32 + w * matrix.M42;
631 destinationArray[i].Z = x * matrix.M13 + y * matrix.M23 + z * matrix.M33 + w * matrix.M43;
632 destinationArray[i].W = x * matrix.M14 + y * matrix.M24 + z * matrix.M34 + w * matrix.M44;
633 }
634 }
635
636 [SuppressMessage("Microsoft.Usage", "CA2233")]
638 {
639 if (sourceArray == null)
640 {
641 throw new ArgumentNullException("sourceArray");
642 }
643 if (destinationArray == null)
644 {
645 throw new ArgumentNullException("destinationArray");
646 }
647 if (sourceArray.Length < (long)sourceIndex + (long)length)
648 {
650 }
651 if (destinationArray.Length < (long)destinationIndex + (long)length)
652 {
654 }
655 while (length > 0)
656 {
657 float x = sourceArray[sourceIndex].X;
658 float y = sourceArray[sourceIndex].Y;
659 float z = sourceArray[sourceIndex].Z;
660 float w = sourceArray[sourceIndex].W;
661 destinationArray[destinationIndex].X = x * matrix.M11 + y * matrix.M21 + z * matrix.M31 + w * matrix.M41;
662 destinationArray[destinationIndex].Y = x * matrix.M12 + y * matrix.M22 + z * matrix.M32 + w * matrix.M42;
663 destinationArray[destinationIndex].Z = x * matrix.M13 + y * matrix.M23 + z * matrix.M33 + w * matrix.M43;
664 destinationArray[destinationIndex].W = x * matrix.M14 + y * matrix.M24 + z * matrix.M34 + w * matrix.M44;
665 sourceIndex++;
667 length--;
668 }
669 }
670
671 public static void Transform(Vector4[] sourceArray, ref Quaternion rotation, Vector4[] destinationArray)
672 {
673 if (sourceArray == null)
674 {
675 throw new ArgumentNullException("sourceArray");
676 }
677 if (destinationArray == null)
678 {
679 throw new ArgumentNullException("destinationArray");
680 }
681 if (destinationArray.Length < sourceArray.Length)
682 {
684 }
685 float num = rotation.X + rotation.X;
686 float num2 = rotation.Y + rotation.Y;
687 float num3 = rotation.Z + rotation.Z;
688 float num4 = rotation.W * num;
689 float num5 = rotation.W * num2;
690 float num6 = rotation.W * num3;
691 float num7 = rotation.X * num;
692 float num8 = rotation.X * num2;
693 float num9 = rotation.X * num3;
694 float num10 = rotation.Y * num2;
695 float num11 = rotation.Y * num3;
696 float num12 = rotation.Z * num3;
697 float num13 = 1f - num10 - num12;
698 float num14 = num8 - num6;
699 float num15 = num9 + num5;
700 float num16 = num8 + num6;
701 float num17 = 1f - num7 - num12;
702 float num18 = num11 - num4;
703 float num19 = num9 - num5;
704 float num20 = num11 + num4;
705 float num21 = 1f - num7 - num10;
706 for (int i = 0; i < sourceArray.Length; i++)
707 {
708 float x = sourceArray[i].X;
709 float y = sourceArray[i].Y;
710 float z = sourceArray[i].Z;
711 destinationArray[i].X = x * num13 + y * num14 + z * num15;
712 destinationArray[i].Y = x * num16 + y * num17 + z * num18;
713 destinationArray[i].Z = x * num19 + y * num20 + z * num21;
714 destinationArray[i].W = sourceArray[i].W;
715 }
716 }
717
718 [SuppressMessage("Microsoft.Usage", "CA2233")]
720 {
721 if (sourceArray == null)
722 {
723 throw new ArgumentNullException("sourceArray");
724 }
725 if (destinationArray == null)
726 {
727 throw new ArgumentNullException("destinationArray");
728 }
729 if (sourceArray.Length < (long)sourceIndex + (long)length)
730 {
732 }
733 if (destinationArray.Length < (long)destinationIndex + (long)length)
734 {
736 }
737 float num = rotation.X + rotation.X;
738 float num2 = rotation.Y + rotation.Y;
739 float num3 = rotation.Z + rotation.Z;
740 float num4 = rotation.W * num;
741 float num5 = rotation.W * num2;
742 float num6 = rotation.W * num3;
743 float num7 = rotation.X * num;
744 float num8 = rotation.X * num2;
745 float num9 = rotation.X * num3;
746 float num10 = rotation.Y * num2;
747 float num11 = rotation.Y * num3;
748 float num12 = rotation.Z * num3;
749 float num13 = 1f - num10 - num12;
750 float num14 = num8 - num6;
751 float num15 = num9 + num5;
752 float num16 = num8 + num6;
753 float num17 = 1f - num7 - num12;
754 float num18 = num11 - num4;
755 float num19 = num9 - num5;
756 float num20 = num11 + num4;
757 float num21 = 1f - num7 - num10;
758 while (length > 0)
759 {
760 float x = sourceArray[sourceIndex].X;
761 float y = sourceArray[sourceIndex].Y;
762 float z = sourceArray[sourceIndex].Z;
763 float w = sourceArray[sourceIndex].W;
764 destinationArray[destinationIndex].X = x * num13 + y * num14 + z * num15;
765 destinationArray[destinationIndex].Y = x * num16 + y * num17 + z * num18;
766 destinationArray[destinationIndex].Z = x * num19 + y * num20 + z * num21;
768 sourceIndex++;
770 length--;
771 }
772 }
773
775 {
776 Vector4 result = default(Vector4);
777 result.X = 0f - value.X;
778 result.Y = 0f - value.Y;
779 result.Z = 0f - value.Z;
780 result.W = 0f - value.W;
781 return result;
782 }
783
784 public static void Negate(ref Vector4 value, out Vector4 result)
785 {
786 result.X = 0f - value.X;
787 result.Y = 0f - value.Y;
788 result.Z = 0f - value.Z;
789 result.W = 0f - value.W;
790 }
791
792 public static Vector4 Add(Vector4 value1, Vector4 value2)
793 {
794 Vector4 result = default(Vector4);
795 result.X = value1.X + value2.X;
796 result.Y = value1.Y + value2.Y;
797 result.Z = value1.Z + value2.Z;
798 result.W = value1.W + value2.W;
799 return result;
800 }
801
802 public static void Add(ref Vector4 value1, ref Vector4 value2, out Vector4 result)
803 {
804 result.X = value1.X + value2.X;
805 result.Y = value1.Y + value2.Y;
806 result.Z = value1.Z + value2.Z;
807 result.W = value1.W + value2.W;
808 }
809
810 public static Vector4 Subtract(Vector4 value1, Vector4 value2)
811 {
812 Vector4 result = default(Vector4);
813 result.X = value1.X - value2.X;
814 result.Y = value1.Y - value2.Y;
815 result.Z = value1.Z - value2.Z;
816 result.W = value1.W - value2.W;
817 return result;
818 }
819
820 public static void Subtract(ref Vector4 value1, ref Vector4 value2, out Vector4 result)
821 {
822 result.X = value1.X - value2.X;
823 result.Y = value1.Y - value2.Y;
824 result.Z = value1.Z - value2.Z;
825 result.W = value1.W - value2.W;
826 }
827
828 public static Vector4 Multiply(Vector4 value1, Vector4 value2)
829 {
830 Vector4 result = default(Vector4);
831 result.X = value1.X * value2.X;
832 result.Y = value1.Y * value2.Y;
833 result.Z = value1.Z * value2.Z;
834 result.W = value1.W * value2.W;
835 return result;
836 }
837
838 public static void Multiply(ref Vector4 value1, ref Vector4 value2, out Vector4 result)
839 {
840 result.X = value1.X * value2.X;
841 result.Y = value1.Y * value2.Y;
842 result.Z = value1.Z * value2.Z;
843 result.W = value1.W * value2.W;
844 }
845
846 public static Vector4 Multiply(Vector4 value1, float scaleFactor)
847 {
848 Vector4 result = default(Vector4);
849 result.X = value1.X * scaleFactor;
850 result.Y = value1.Y * scaleFactor;
851 result.Z = value1.Z * scaleFactor;
852 result.W = value1.W * scaleFactor;
853 return result;
854 }
855
856 public static void Multiply(ref Vector4 value1, float scaleFactor, out Vector4 result)
857 {
858 result.X = value1.X * scaleFactor;
859 result.Y = value1.Y * scaleFactor;
860 result.Z = value1.Z * scaleFactor;
861 result.W = value1.W * scaleFactor;
862 }
863
864 public static Vector4 Divide(Vector4 value1, Vector4 value2)
865 {
866 Vector4 result = default(Vector4);
867 result.X = value1.X / value2.X;
868 result.Y = value1.Y / value2.Y;
869 result.Z = value1.Z / value2.Z;
870 result.W = value1.W / value2.W;
871 return result;
872 }
873
874 public static void Divide(ref Vector4 value1, ref Vector4 value2, out Vector4 result)
875 {
876 result.X = value1.X / value2.X;
877 result.Y = value1.Y / value2.Y;
878 result.Z = value1.Z / value2.Z;
879 result.W = value1.W / value2.W;
880 }
881
882 public static Vector4 Divide(Vector4 value1, float divider)
883 {
884 float num = 1f / divider;
885 Vector4 result = default(Vector4);
886 result.X = value1.X * num;
887 result.Y = value1.Y * num;
888 result.Z = value1.Z * num;
889 result.W = value1.W * num;
890 return result;
891 }
892
893 public static void Divide(ref Vector4 value1, float divider, out Vector4 result)
894 {
895 float num = 1f / divider;
896 result.X = value1.X * num;
897 result.Y = value1.Y * num;
898 result.Z = value1.Z * num;
899 result.W = value1.W * num;
900 }
901
903 {
904 Vector4 result = default(Vector4);
905 result.X = 0f - value.X;
906 result.Y = 0f - value.Y;
907 result.Z = 0f - value.Z;
908 result.W = 0f - value.W;
909 return result;
910 }
911
912 public static bool operator ==(Vector4 value1, Vector4 value2)
913 {
914 if (value1.X == value2.X && value1.Y == value2.Y && value1.Z == value2.Z)
915 {
916 return value1.W == value2.W;
917 }
918 return false;
919 }
920
921 public static bool operator !=(Vector4 value1, Vector4 value2)
922 {
923 if (value1.X == value2.X && value1.Y == value2.Y && value1.Z == value2.Z)
924 {
925 return value1.W != value2.W;
926 }
927 return true;
928 }
929
930 public static Vector4 operator +(Vector4 value1, Vector4 value2)
931 {
932 Vector4 result = default(Vector4);
933 result.X = value1.X + value2.X;
934 result.Y = value1.Y + value2.Y;
935 result.Z = value1.Z + value2.Z;
936 result.W = value1.W + value2.W;
937 return result;
938 }
939
940 public static Vector4 operator -(Vector4 value1, Vector4 value2)
941 {
942 Vector4 result = default(Vector4);
943 result.X = value1.X - value2.X;
944 result.Y = value1.Y - value2.Y;
945 result.Z = value1.Z - value2.Z;
946 result.W = value1.W - value2.W;
947 return result;
948 }
949
950 public static Vector4 operator *(Vector4 value1, Vector4 value2)
951 {
952 Vector4 result = default(Vector4);
953 result.X = value1.X * value2.X;
954 result.Y = value1.Y * value2.Y;
955 result.Z = value1.Z * value2.Z;
956 result.W = value1.W * value2.W;
957 return result;
958 }
959
960 public static Vector4 operator *(Vector4 value1, float scaleFactor)
961 {
962 Vector4 result = default(Vector4);
963 result.X = value1.X * scaleFactor;
964 result.Y = value1.Y * scaleFactor;
965 result.Z = value1.Z * scaleFactor;
966 result.W = value1.W * scaleFactor;
967 return result;
968 }
969
970 public static Vector4 operator *(float scaleFactor, Vector4 value1)
971 {
972 Vector4 result = default(Vector4);
973 result.X = value1.X * scaleFactor;
974 result.Y = value1.Y * scaleFactor;
975 result.Z = value1.Z * scaleFactor;
976 result.W = value1.W * scaleFactor;
977 return result;
978 }
979
980 public static Vector4 operator /(Vector4 value1, Vector4 value2)
981 {
982 Vector4 result = default(Vector4);
983 result.X = value1.X / value2.X;
984 result.Y = value1.Y / value2.Y;
985 result.Z = value1.Z / value2.Z;
986 result.W = value1.W / value2.W;
987 return result;
988 }
989
990 public static Vector4 operator /(Vector4 value1, float divider)
991 {
992 float num = 1f / divider;
993 Vector4 result = default(Vector4);
994 result.X = value1.X * num;
995 result.Y = value1.Y * num;
996 result.Z = value1.Z * num;
997 result.W = value1.W * num;
998 return result;
999 }
1000}
static CultureInfo CurrentCulture
static double Sqrt(double d)
static float Distance(Vector4 value1, Vector4 value2)
Definition Vector4.cs:119
static void Transform(ref Vector4 value, ref Quaternion rotation, out Vector4 result)
Definition Vector4.cs:586
override bool Equals(object obj)
Definition Vector4.cs:93
static float Dot(Vector4 vector1, Vector4 vector2)
Definition Vector4.cs:157
static void Divide(ref Vector4 value1, float divider, out Vector4 result)
Definition Vector4.cs:893
static void SmoothStep(ref Vector4 value1, ref Vector4 value2, float amount, out Vector4 result)
Definition Vector4.cs:325
static void Lerp(ref Vector4 value1, ref Vector4 value2, float amount, out Vector4 result)
Definition Vector4.cs:287
static Vector4 operator-(Vector4 value)
Definition Vector4.cs:902
static void Transform(ref Vector3 position, ref Matrix matrix, out Vector4 result)
Definition Vector4.cs:427
static Vector4 Transform(Vector3 value, Quaternion rotation)
Definition Vector4.cs:513
Vector4(Vector2 value, float z, float w)
Definition Vector4.cs:57
static Vector4 Transform(Vector4 vector, Matrix matrix)
Definition Vector4.cs:439
static Vector4 Transform(Vector3 position, Matrix matrix)
Definition Vector4.cs:413
static void DistanceSquared(ref Vector4 value1, ref Vector4 value2, out float result)
Definition Vector4.cs:148
static Vector4 Transform(Vector4 value, Quaternion rotation)
Definition Vector4.cs:561
static void Barycentric(ref Vector4 value1, ref Vector4 value2, ref Vector4 value3, float amount1, float amount2, out Vector4 result)
Definition Vector4.cs:305
static void Transform(Vector4[] sourceArray, int sourceIndex, ref Quaternion rotation, Vector4[] destinationArray, int destinationIndex, int length)
Definition Vector4.cs:719
static Vector4 Divide(Vector4 value1, Vector4 value2)
Definition Vector4.cs:864
static void Dot(ref Vector4 vector1, ref Vector4 vector2, out float result)
Definition Vector4.cs:162
static bool operator!=(Vector4 value1, Vector4 value2)
Definition Vector4.cs:921
static Vector4 Normalize(Vector4 vector)
Definition Vector4.cs:177
static void Transform(Vector4[] sourceArray, ref Quaternion rotation, Vector4[] destinationArray)
Definition Vector4.cs:671
static Vector4 Transform(Vector2 value, Quaternion rotation)
Definition Vector4.cs:465
static Vector4 Transform(Vector2 position, Matrix matrix)
Definition Vector4.cs:387
static Vector4 Min(Vector4 value1, Vector4 value2)
Definition Vector4.cs:199
static Vector4 Divide(Vector4 value1, float divider)
Definition Vector4.cs:882
static Vector4 Subtract(Vector4 value1, Vector4 value2)
Definition Vector4.cs:810
static void Divide(ref Vector4 value1, ref Vector4 value2, out Vector4 result)
Definition Vector4.cs:874
bool Equals(Vector4 other)
Definition Vector4.cs:84
static void Normalize(ref Vector4 vector, out Vector4 result)
Definition Vector4.cs:189
static void CatmullRom(ref Vector4 value1, ref Vector4 value2, ref Vector4 value3, ref Vector4 value4, float amount, out Vector4 result)
Definition Vector4.cs:347
static Vector4 Add(Vector4 value1, Vector4 value2)
Definition Vector4.cs:792
static Vector4 CatmullRom(Vector4 value1, Vector4 value2, Vector4 value3, Vector4 value4, float amount)
Definition Vector4.cs:335
static void Multiply(ref Vector4 value1, float scaleFactor, out Vector4 result)
Definition Vector4.cs:856
static Vector4 Lerp(Vector4 value1, Vector4 value2, float amount)
Definition Vector4.cs:277
static Vector4 SmoothStep(Vector4 value1, Vector4 value2, float amount)
Definition Vector4.cs:313
static Vector4 operator+(Vector4 value1, Vector4 value2)
Definition Vector4.cs:930
static Vector4 Barycentric(Vector4 value1, Vector4 value2, Vector4 value3, float amount1, float amount2)
Definition Vector4.cs:295
static void Subtract(ref Vector4 value1, ref Vector4 value2, out Vector4 result)
Definition Vector4.cs:820
static void Max(ref Vector4 value1, ref Vector4 value2, out Vector4 result)
Definition Vector4.cs:227
Vector4(Vector3 value, float w)
Definition Vector4.cs:65
static void Negate(ref Vector4 value, out Vector4 result)
Definition Vector4.cs:784
static void Hermite(ref Vector4 value1, ref Vector4 tangent1, ref Vector4 value2, ref Vector4 tangent2, float amount, out Vector4 result)
Definition Vector4.cs:373
static void Transform(Vector4[] sourceArray, ref Matrix matrix, Vector4[] destinationArray)
Definition Vector4.cs:609
static void Transform(ref Vector2 value, ref Quaternion rotation, out Vector4 result)
Definition Vector4.cs:490
static void Min(ref Vector4 value1, ref Vector4 value2, out Vector4 result)
Definition Vector4.cs:209
static void Add(ref Vector4 value1, ref Vector4 value2, out Vector4 result)
Definition Vector4.cs:802
static void Transform(ref Vector4 vector, ref Matrix matrix, out Vector4 result)
Definition Vector4.cs:453
static Vector4 operator/(Vector4 value1, Vector4 value2)
Definition Vector4.cs:980
static void Distance(ref Vector4 value1, ref Vector4 value2, out float result)
Definition Vector4.cs:129
static void Clamp(ref Vector4 value1, ref Vector4 min, ref Vector4 max, out Vector4 result)
Definition Vector4.cs:257
static Vector4 Max(Vector4 value1, Vector4 value2)
Definition Vector4.cs:217
static Vector4 Multiply(Vector4 value1, float scaleFactor)
Definition Vector4.cs:846
override string ToString()
Definition Vector4.cs:78
static void Transform(ref Vector3 value, ref Quaternion rotation, out Vector4 result)
Definition Vector4.cs:538
static void Transform(ref Vector2 position, ref Matrix matrix, out Vector4 result)
Definition Vector4.cs:401
static float DistanceSquared(Vector4 value1, Vector4 value2)
Definition Vector4.cs:139
static Vector4 Negate(Vector4 value)
Definition Vector4.cs:774
Vector4(float x, float y, float z, float w)
Definition Vector4.cs:49
static bool operator==(Vector4 value1, Vector4 value2)
Definition Vector4.cs:912
static void Multiply(ref Vector4 value1, ref Vector4 value2, out Vector4 result)
Definition Vector4.cs:838
static Vector4 Multiply(Vector4 value1, Vector4 value2)
Definition Vector4.cs:828
static void Transform(Vector4[] sourceArray, int sourceIndex, ref Matrix matrix, Vector4[] destinationArray, int destinationIndex, int length)
Definition Vector4.cs:637
static Vector4 Clamp(Vector4 value1, Vector4 min, Vector4 max)
Definition Vector4.cs:235
static Vector4 Hermite(Vector4 value1, Vector4 tangent1, Vector4 value2, Vector4 tangent2, float amount)
Definition Vector4.cs:357
static Vector4 operator*(Vector4 value1, Vector4 value2)
Definition Vector4.cs:950