Files
OldThink/Content.Shared/_White/Spline/CatmullRom/SplineCatmullRom2D.cs

39 lines
1.2 KiB
C#

using System.Numerics;
using System.Runtime.CompilerServices;
namespace Content.Shared._White.Spline.CatmullRom;
public sealed class SplineCatmullRom2D : SplineCatmullRom<Vector2>
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
protected override Vector2 Add(Vector2 op1, Vector2 op2)
{
return op1 + op2;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
protected override Vector2 Subtract(Vector2 op1, Vector2 op2)
{
return op1 - op2;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
protected override float Magnitude(Vector2 op1)
{
return op1.Length();
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
protected override Vector2 CalculateCatmullRom(
(Vector2 p0, Vector2 p1, Vector2 p2, Vector2 p3) points,
(float c0, float c1, float c2, float c3) coeffs)
{
return new Vector2(
0.5f * (points.p0.X * coeffs.c0 + points.p1.X * coeffs.c1 + points.p2.X * coeffs.c2 +
points.p3.X * coeffs.c3),
0.5f * (points.p0.Y * coeffs.c0 + points.p1.Y * coeffs.c1 + points.p2.Y * coeffs.c2 +
points.p3.Y * coeffs.c3)
);
}
}