4 using System.Collections.Generic;
15 public static Vector2
Mul(
this Vector2 value, Vector2 scale)
17 return new Vector2(value.x * scale.x, value.y * scale.y);
20 public static Vector2
Div(
this Vector2 value, Vector2 scale)
22 return new Vector2(value.x / scale.x, value.y / scale.y);
25 public static Vector3
Mul(
this Vector3 value, Vector3 scale)
27 return new Vector3(value.x * scale.x, value.y * scale.y, value.z * scale.z);
30 public static Vector3
Div(
this Vector3 value, Vector3 scale)
32 return new Vector3(value.x / scale.x, value.y / scale.y, value.z / scale.z);
35 public static Vector3
RotateAround(
this Vector3 point, Vector3 pivot, Quaternion rotation)
37 return rotation * (point - pivot) + pivot;
40 public static Vector3
RotateAround(
this Vector3 point, Vector3 pivot, Vector3 eulerAngles)
42 return RotateAround(point, pivot, Quaternion.Euler(eulerAngles));
45 public static Vector3
TransformPoint(
this Vector3 point, Vector3 translation, Quaternion rotation, Vector3 lossyScale)
47 return rotation * Vector3.Scale(lossyScale, point) + translation;
50 public static Vector3
InverseTransformPoint(
this Vector3 point, Vector3 translation, Quaternion rotation, Vector3 lossyScale)
52 var scaleInv =
new Vector3(1 / lossyScale.x, 1 / lossyScale.y, 1 / lossyScale.z);
53 return Vector3.Scale(scaleInv, (Quaternion.Inverse(rotation) * (point - translation)));
56 public static Vector2
Average(
this IEnumerable<Vector2> vectors)
61 foreach (var pos
in vectors)
67 return new Vector2(x / count, y / count);
70 public static Vector3
Average(
this IEnumerable<Vector3> vectors)
76 foreach (var pos
in vectors)
83 return new Vector3(x / count, y / count, z / count);
86 public static Vector2
Average(
this ICollection<Vector2> vectors)
88 int count = vectors.Count;
96 foreach (var pos
in vectors)
101 return new Vector2(x / count, y / count);
104 public static Vector3
Average(
this ICollection<Vector3> vectors)
106 int count = vectors.Count;
115 foreach (var pos
in vectors)
121 return new Vector3(x / count, y / count, z / count);
124 public static Vector2
Median(
this IEnumerable<Vector2> vectors)
126 int count = vectors.Count();
132 return vectors.OrderBy(v => v.sqrMagnitude).ElementAt(count / 2);
135 public static Vector3
Median(
this IEnumerable<Vector3> vectors)
137 int count = vectors.Count();
143 return vectors.OrderBy(v => v.sqrMagnitude).ElementAt(count / 2);
146 public static Vector2
Median(
this ICollection<Vector2> vectors)
148 int count = vectors.Count;
154 return vectors.OrderBy(v => v.sqrMagnitude).ElementAt(count / 2);
157 public static Vector3
Median(
this ICollection<Vector3> vectors)
159 int count = vectors.Count;
165 return vectors.OrderBy(v => v.sqrMagnitude).ElementAt(count / 2);