using MultiWheelC.TrajectoryPlanning.Utils;

namespace MultiWheelC.TrajectoryPlanning.Mapping;

/// <summary>以世界 mm 坐标表示的圆形障碍物。</summary>
public sealed class CircleObstacle : IMapObstacle
{
    /// <summary>
    /// 创建圆形障碍物。
    ///
    /// 参数：centerX、centerY 为圆心世界坐标，单位 mm；radiusMm 为半径，单位 mm。
    /// 注意：构造不抛出几何校验异常，请通过 <see cref="IsValid"/> 判断后再使用。
    /// </summary>
    public CircleObstacle(float centerX, float centerY, float radiusMm)
    {
        CenterX = centerX; CenterY = centerY; RadiusMm = radiusMm;
    }
    /// <summary>圆心世界 X 坐标，单位 mm。</summary>
    public float CenterX { get; }
    /// <summary>圆心世界 Y 坐标，单位 mm。</summary>
    public float CenterY { get; }
    /// <summary>圆的半径，单位 mm。</summary>
    public float RadiusMm { get; }
    /// <summary>圆心和半径均为有限数且半径不小于零时为 true；否则为 false。</summary>
    public bool IsValid
    {
        get { return NumericGuard.IsFinite(CenterX) && NumericGuard.IsFinite(CenterY) && NumericGuard.IsFinite(RadiusMm) && RadiusMm >= 0f; }
    }
}
