| 
									
										
										
										
											2025-10-08 02:52:32 +08:00
										 |  |  | local Vector2D = { | 
					
						
							|  |  |  |     Zero = {X = 0, Y = 0} | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2025-07-09 01:08:35 +08:00
										 |  |  | function Vector2D.New(x, y) | 
					
						
							|  |  |  |     return {X = x or 0, Y = y or 0} | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function Vector2D.Add(a, b) | 
					
						
							|  |  |  |     return Vector2D.New(a.X + b.X, a.Y + b.Y) | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function Vector2D.Sub(a, b) | 
					
						
							|  |  |  |     return Vector2D.New(a.X - b.X, a.Y - b.Y) | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function Vector2D.Mul(v, s) | 
					
						
							|  |  |  |     return Vector2D.New(v.X * s, v.Y * s) | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function Vector2D.Div(v, s) | 
					
						
							|  |  |  |     return Vector2D.New(v.X / s, v.Y / s) | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function Vector2D.Magnitude(v) | 
					
						
							|  |  |  |     return math.sqrt(v.X * v.X + v.Y * v.Y) | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function Vector2D.Normalize(v) | 
					
						
							|  |  |  |     local mag = Vector2D.Magnitude(v) | 
					
						
							|  |  |  |     return mag > 0 and Vector2D.Div(v, mag) or Vector2D.New() | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function Vector2D.Dot(a, b) | 
					
						
							|  |  |  |     return a.X * b.X + a.Y * b.Y | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | -- 2D 叉积(返回标量) | 
					
						
							|  |  |  | function Vector2D.Cross(a, b) | 
					
						
							|  |  |  |     return a.X * b.Y - a.Y * b.X | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function Vector2D.ToUnrealEngine3D(vector, z) | 
					
						
							|  |  |  |     local FVector = import("Vector") | 
					
						
							|  |  |  |     local new_vector = FVector() | 
					
						
							|  |  |  |     new_vector.Z = z | 
					
						
							|  |  |  |     new_vector.X = vector.X | 
					
						
							|  |  |  |     new_vector.Y = vector.Y | 
					
						
							|  |  |  |     return new_vector | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-08 02:52:32 +08:00
										 |  |  | function Vector2D.Equals(a, b, tolerance) | 
					
						
							|  |  |  |     local tol = tolerance or 0.001 | 
					
						
							|  |  |  |     print(tol, a.X-b.X, a.Y-b.Y) | 
					
						
							|  |  |  |     return math.abs(a.X - b.X) < tol and math.abs(a.Y - b.Y) < tol | 
					
						
							|  |  |  | end | 
					
						
							| 
									
										
										
										
											2025-07-09 01:08:35 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | return Vector2D |