From 3b984a0a4b61aeba0d656c46b96a4a893c42d888 Mon Sep 17 00:00:00 2001 From: Syntriax Date: Sun, 19 Oct 2025 00:13:01 +0300 Subject: [PATCH] feat: added Vector3D.Transform method --- Engine.Core/Primitives/Vector3D.cs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Engine.Core/Primitives/Vector3D.cs b/Engine.Core/Primitives/Vector3D.cs index 87f0761..3551f35 100644 --- a/Engine.Core/Primitives/Vector3D.cs +++ b/Engine.Core/Primitives/Vector3D.cs @@ -264,6 +264,15 @@ public readonly struct Vector3D(float x, float y, float z) : IEquatableThe dot product of the two s. public static float Dot(Vector3D left, Vector3D right) => left.X * right.X + left.Y * right.Y + left.Z * right.Z; + /// + /// Transforms the using the specified . + /// + /// The to transform. + /// The to apply. + /// The transformed . + public static Vector3D Transform(Vector3D vector, ITransform3D transform) + => Quaternion.RotateVector(vector, transform.Rotation).Add(transform.Position).Scale(transform.Scale); + /// /// Checks if two s are approximately equal within a specified epsilon range. /// @@ -363,6 +372,12 @@ public static class Vector3DExtensions /// public static float Dot(this Vector3D left, Vector3D right) => Vector3D.Dot(left, right); + /// + public static Vector3D Transform(this Vector3D vector, ITransform3D transform) => Vector3D.Transform(vector, transform); + + /// + public static Vector3D Transform(this ITransform3D transform, Vector3D vector) => Vector3D.Transform(vector, transform); + /// public static bool ApproximatelyEquals(this Vector3D left, Vector3D right, float epsilon = float.Epsilon) => Vector3D.ApproximatelyEquals(left, right, epsilon); }