Syntriax.Engine/Engine.Physics2D/Primitives/Circle.cs

34 lines
1.5 KiB
C#
Raw Normal View History

using Syntriax.Engine.Core;
2024-01-24 19:21:53 +03:00
using Syntriax.Engine.Core.Abstract;
namespace Syntriax.Engine.Physics2D.Primitives;
public record Circle(Vector2D Center, float Radius)
{
2024-01-23 19:14:23 +03:00
public float RadiusSquared => Radius * Radius;
public float Diameter => 2f * Radius;
2024-01-24 19:21:53 +03:00
public static Circle SetCenter(Circle circle, Vector2D center) => new(center, circle.Radius);
public static Circle SetRadius(Circle circle, float radius) => new(circle.Center, radius);
public static Circle Displace(Circle circle, Vector2D displaceVector) => new(circle.Center + displaceVector, circle.Radius);
public static Circle TransformCircle(ITransform transform, Circle circle)
=> new(transform.TransformVector2D(circle.Center), circle.Radius * transform.Scale.Magnitude);
2024-01-23 19:14:23 +03:00
public static bool ApproximatelyEquals(Circle left, Circle right)
=> left.Center.ApproximatelyEquals(right.Center) && left.Radius.ApproximatelyEquals(right.Radius);
2024-01-23 19:14:23 +03:00
}
2024-01-23 19:14:23 +03:00
public static class CircleExtensions
{
2024-01-24 19:21:53 +03:00
public static Circle SetCenter(this Circle circle, Vector2D center) => Circle.SetCenter(circle, center);
public static Circle SetRadius(this Circle circle, float radius) => Circle.SetRadius(circle, radius);
public static Circle Displace(this Circle circle, Vector2D displaceVector) => Circle.Displace(circle, displaceVector);
2024-01-25 18:37:51 +03:00
public static Circle TransformCircle(this ITransform transform, Circle circle) => Circle.TransformCircle(transform, circle);
2024-01-24 19:21:53 +03:00
2024-01-23 19:14:23 +03:00
public static bool ApproximatelyEquals(this Circle left, Circle right) => Circle.ApproximatelyEquals(left, right);
}