Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
Vector2.cs
浏览该文件的文档.
1namespace Engine {
2 public struct Vector2 : IEquatable<Vector2> {
3 public float X;
4
5 public float Y;
6
7 public static readonly Vector2 Zero = new(0f);
8
9 public static readonly Vector2 One = new(1f);
10
11 public static readonly Vector2 UnitX = new(1f, 0f);
12
13 public static readonly Vector2 UnitY = new(0f, 1f);
14
15 public Vector2 YX {
16 get => new(Y, X);
17 set {
18 Y = value.X;
19 X = value.Y;
20 }
21 }
22
23 public Vector2(float v) {
24 X = v;
25 Y = v;
26 }
27
28 public Vector2(float x, float y) {
29 X = x;
30 Y = y;
31 }
32
33 public Vector2(Point2 p) {
34 X = p.X;
35 Y = p.Y;
36 }
37
38 public static implicit operator Vector2((float X, float Y) v) => new(v.X, v.Y);
39
40 public override bool Equals(object obj) => obj is Vector2 && Equals((Vector2)obj);
41
42 public override int GetHashCode() => X.GetHashCode() + Y.GetHashCode();
43
44 public override string ToString() => $"{X},{Y}";
45
46 public bool Equals(Vector2 other) => X == other.X && Y == other.Y;
47
48 public static Vector2 CreateFromAngle(float angle) {
49 float y = MathF.Cos(angle);
50 return new Vector2(0f - MathF.Sin(angle), y);
51 }
52
53 public static float Distance(Vector2 v1, Vector2 v2) => MathF.Sqrt(DistanceSquared(v1, v2));
54
55 public static float DistanceSquared(Vector2 v1, Vector2 v2) => MathUtils.Sqr(v1.X - v2.X) + MathUtils.Sqr(v1.Y - v2.Y);
56
57 public static float Dot(Vector2 v1, Vector2 v2) => v1.X * v2.X + v1.Y * v2.Y;
58
59 public static float Cross(Vector2 v1, Vector2 v2) => v1.X * v2.Y - v1.Y * v2.X;
60
61 public static Vector2 Perpendicular(Vector2 v) => new(0f - v.Y, v.X);
62
63 public static Vector2 Rotate(Vector2 v, float angle) {
64 float num = MathF.Cos(angle);
65 float num2 = MathF.Sin(angle);
66 return new Vector2(num * v.X + num2 * v.Y, (0f - num2) * v.X + num * v.Y);
67 }
68
69 public float Length() => MathF.Sqrt(X * X + Y * Y);
70
71 public float LengthSquared() => X * X + Y * Y;
72
73 public static Vector2 Floor(Vector2 v) => new(MathF.Floor(v.X), MathF.Floor(v.Y));
74
75 public static Vector2 Ceiling(Vector2 v) => new(MathF.Ceiling(v.X), MathF.Ceiling(v.Y));
76
77 public static Vector2 Round(Vector2 v) => new(MathF.Round(v.X), MathF.Round(v.Y));
78
79 public static Vector2 Min(Vector2 v, float f) => new(MathF.Min(v.X, f), MathF.Min(v.Y, f));
80
81 public static Vector2 Min(Vector2 v1, Vector2 v2) => new(MathF.Min(v1.X, v2.X), MathF.Min(v1.Y, v2.Y));
82
83 public static Vector2 Max(Vector2 v, float f) => new(MathF.Max(v.X, f), MathF.Max(v.Y, f));
84
85 public static Vector2 Max(Vector2 v1, Vector2 v2) => new(MathF.Max(v1.X, v2.X), MathF.Max(v1.Y, v2.Y));
86
87 public static Vector2 Clamp(Vector2 v, float min, float max) => new(Math.Clamp(v.X, min, max), Math.Clamp(v.Y, min, max));
88
89 public static Vector2 Saturate(Vector2 v) => new(MathUtils.Saturate(v.X), MathUtils.Saturate(v.Y));
90
91 public static Vector2 Lerp(Vector2 v1, Vector2 v2, float f) => new(MathUtils.Lerp(v1.X, v2.X, f), MathUtils.Lerp(v1.Y, v2.Y, f));
92
93 public static Vector2 CatmullRom(Vector2 v1, Vector2 v2, Vector2 v3, Vector2 v4, float f) => new(
94 MathUtils.CatmullRom(v1.X, v2.X, v3.X, v4.X, f),
95 MathUtils.CatmullRom(v1.Y, v2.Y, v3.Y, v4.Y, f)
96 );
97
98 public static Vector2 Normalize(Vector2 v) {
99 float num = v.Length();
100 return !(num > 0f) ? UnitX : v / num;
101 }
102
103 public static Vector2 LimitLength(Vector2 v, float maxLength) {
104 float num = v.LengthSquared();
105 return num > maxLength * maxLength ? v * (maxLength / MathF.Sqrt(num)) : v;
106 }
107
108 public static float Angle(Vector2 v1, Vector2 v2) {
109 float num = MathF.Atan2(v1.Y, v1.X);
110 float num2 = MathF.Atan2(v2.Y, v2.X) - num;
111 if (num2 > (float)Math.PI) {
112 num2 -= (float)Math.PI * 2f;
113 }
114 else if (num2 <= -(float)Math.PI) {
115 num2 += (float)Math.PI * 2f;
116 }
117 return num2;
118 }
119
120 public static Vector2 Transform(Vector2 v, Matrix m) => new(v.X * m.M11 + v.Y * m.M21 + m.M41, v.X * m.M12 + v.Y * m.M22 + m.M42);
121
122 public static void Transform(ref Vector2 v, ref Matrix m, out Vector2 result) {
123 result = new Vector2(v.X * m.M11 + v.Y * m.M21 + m.M41, v.X * m.M12 + v.Y * m.M22 + m.M42);
124 }
125
126 public static Vector2 Transform(Vector2 v, Quaternion q) {
127 float num = q.X + q.X;
128 float num2 = q.Y + q.Y;
129 float num3 = q.Z + q.Z;
130 float num4 = q.W * num3;
131 float num5 = q.X * num;
132 float num6 = q.X * num2;
133 float num7 = q.Y * num2;
134 float num8 = q.Z * num3;
135 return new Vector2(v.X * (1f - num7 - num8) + v.Y * (num6 - num4), v.X * (num6 + num4) + v.Y * (1f - num5 - num8));
136 }
137
138 public static void Transform(ref Vector2 v, ref Quaternion q, out Vector2 result) {
139 float num = q.X + q.X;
140 float num2 = q.Y + q.Y;
141 float num3 = q.Z + q.Z;
142 float num4 = q.W * num3;
143 float num5 = q.X * num;
144 float num6 = q.X * num2;
145 float num7 = q.Y * num2;
146 float num8 = q.Z * num3;
147 result = new Vector2(v.X * (1f - num7 - num8) + v.Y * (num6 - num4), v.X * (num6 + num4) + v.Y * (1f - num5 - num8));
148 }
149
150 public static void Transform(Vector2[] sourceArray,
151 int sourceIndex,
152 ref Matrix m,
153 Vector2[] destinationArray,
154 int destinationIndex,
155 int count) {
156 for (int i = 0; i < count; i++) {
157 Vector2 vector = sourceArray[sourceIndex + i];
158 destinationArray[destinationIndex + i] = new Vector2(
159 vector.X * m.M11 + vector.Y * m.M21 + m.M41,
160 vector.X * m.M12 + vector.Y * m.M22 + m.M42
161 );
162 }
163 }
164
165 public static Vector2 TransformNormal(Vector2 v, Matrix m) => new(v.X * m.M11 + v.Y * m.M21, v.X * m.M12 + v.Y * m.M22);
166
167 public static void TransformNormal(ref Vector2 v, ref Matrix m, out Vector2 result) {
168 result = new Vector2(v.X * m.M11 + v.Y * m.M21, v.X * m.M12 + v.Y * m.M22);
169 }
170
171 public static void TransformNormal(Vector2[] sourceArray,
172 int sourceIndex,
173 ref Matrix m,
174 Vector2[] destinationArray,
175 int destinationIndex,
176 int count) {
177 for (int i = 0; i < count; i++) {
178 Vector2 vector = sourceArray[sourceIndex + i];
179 destinationArray[destinationIndex + i] = new Vector2(vector.X * m.M11 + vector.Y * m.M21, vector.X * m.M12 + vector.Y * m.M22);
180 }
181 }
182
183 public static bool operator ==(Vector2 v1, Vector2 v2) => v1.Equals(v2);
184
185 public static bool operator !=(Vector2 v1, Vector2 v2) => !v1.Equals(v2);
186
187 public static Vector2 operator +(Vector2 v) => v;
188
189 public static Vector2 operator -(Vector2 v) => new(0f - v.X, 0f - v.Y);
190
191 public static Vector2 operator +(Vector2 v1, Vector2 v2) => new(v1.X + v2.X, v1.Y + v2.Y);
192
193 public static Vector2 operator -(Vector2 v1, Vector2 v2) => new(v1.X - v2.X, v1.Y - v2.Y);
194
195 public static Vector2 operator *(Vector2 v1, Vector2 v2) => new(v1.X * v2.X, v1.Y * v2.Y);
196
197 public static Vector2 operator *(Vector2 v, float s) => new(v.X * s, v.Y * s);
198
199 public static Vector2 operator *(float s, Vector2 v) => new(v.X * s, v.Y * s);
200
201 public static Vector2 operator /(Vector2 v1, Vector2 v2) => new(v1.X / v2.X, v1.Y / v2.Y);
202
203 public static Vector2 operator /(Vector2 v, float d) {
204 float num = 1f / d;
205 return new Vector2(v.X * num, v.Y * num);
206 }
207
208 public static Vector2 operator /(float d, Vector2 v) => new(d / v.X, d / v.Y);
209
210 public static Vector2 FixNaN(Vector2 v) {
211 if (float.IsNaN(v.X)) {
212 v.X = 0;
213 }
214 if (float.IsNaN(v.Y)) {
215 v.Y = 0;
216 }
217 return v;
218 }
219
220 public Vector2 FixNaN() {
221 if (float.IsNaN(X)) {
222 X = 0;
223 }
224 if (float.IsNaN(Y)) {
225 Y = 0;
226 }
227 return this;
228 }
229
230 public unsafe Span<float> AsSpan() {
231 fixed (float* ptr = &X) {
232 return new Span<float>(ptr, 2);
233 }
234 }
235
236 public unsafe float* AsPointer() {
237 fixed (float* ptr = &X) {
238 return ptr;
239 }
240 }
241 }
242}
unsafe
定义 Main.cs:15
static float Saturate(float x)
static int Sqr(int x)
static float CatmullRom(float v1, float v2, float v3, float v4, float f)
static float Lerp(float x1, float x2, float f)
static Vector2 Saturate(Vector2 v)
static void TransformNormal(ref Vector2 v, ref Matrix m, out Vector2 result)
static Vector2 operator/(Vector2 v1, Vector2 v2)
static Vector2 Floor(Vector2 v)
static Vector2 Transform(Vector2 v, Quaternion q)
static void Transform(ref Vector2 v, ref Quaternion q, out Vector2 result)
static float Dot(Vector2 v1, Vector2 v2)
bool Equals(Vector2 other)
static bool operator==(Vector2 v1, Vector2 v2)
static Vector2 Clamp(Vector2 v, float min, float max)
static float Cross(Vector2 v1, Vector2 v2)
static readonly Vector2 Zero
static Vector2 TransformNormal(Vector2 v, Matrix m)
static Vector2 CreateFromAngle(float angle)
static Vector2 Max(Vector2 v, float f)
override string ToString()
Vector2(float x, float y)
static Vector2 Min(Vector2 v, float f)
static Vector2 Rotate(Vector2 v, float angle)
static Vector2 Lerp(Vector2 v1, Vector2 v2, float f)
static float DistanceSquared(Vector2 v1, Vector2 v2)
static Vector2 Ceiling(Vector2 v)
override int GetHashCode()
static Vector2 Round(Vector2 v)
static Vector2 Max(Vector2 v1, Vector2 v2)
static readonly Vector2 One
unsafe Span< float > AsSpan()
static Vector2 CatmullRom(Vector2 v1, Vector2 v2, Vector2 v3, Vector2 v4, float f)
static Vector2 operator+(Vector2 v)
static void TransformNormal(Vector2[] sourceArray, int sourceIndex, ref Matrix m, Vector2[] destinationArray, int destinationIndex, int count)
static readonly Vector2 UnitY
static void Transform(Vector2[] sourceArray, int sourceIndex, ref Matrix m, Vector2[] destinationArray, int destinationIndex, int count)
override bool Equals(object obj)
static Vector2 Transform(Vector2 v, Matrix m)
static void Transform(ref Vector2 v, ref Matrix m, out Vector2 result)
static readonly Vector2 UnitX
static Vector2 operator-(Vector2 v)
Vector2(Point2 p)
static Vector2 LimitLength(Vector2 v, float maxLength)
static Vector2 Normalize(Vector2 v)
unsafe float * AsPointer()
static float Angle(Vector2 v1, Vector2 v2)
static Vector2 FixNaN(Vector2 v)
float LengthSquared()
static float Distance(Vector2 v1, Vector2 v2)
static Vector2 Perpendicular(Vector2 v)
static Vector2 operator*(Vector2 v1, Vector2 v2)
static bool operator!=(Vector2 v1, Vector2 v2)
static Vector2 Min(Vector2 v1, Vector2 v2)