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