using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace MyFrameworkPure
{
    public class GeometryTool
    {
        /// 
        /// 射线和球是否相交
        /// 
        /// 
        /// 
        /// 
        public static float? Intersects(Ray ray, BoundingSphere sphere)
        {
            Vector3 difference = sphere.position - ray.origin;
            float differenceLengthSquared = Vector3.SqrMagnitude(difference);
            float sphereRadiusSquared = sphere.radius * sphere.radius;
            float distanceAlongRay;
            //if (differenceLengthSquared < sphereRadiusSquared)
            //{
            //    return 0.0f;
            //}
            Vector3 refDirection = ray.direction;
            distanceAlongRay = Vector3.Dot(refDirection, difference);
            if (distanceAlongRay < 0)
            {
                return null;
            }
            float dist = sphereRadiusSquared + distanceAlongRay * distanceAlongRay - differenceLengthSquared;
            return (dist < 0) ? null : distanceAlongRay - (float?)Mathf.Sqrt(dist);
        }
        /// 
        /// 点到线段的距离
        /// 
        /// 
        /// 
        /// 
        /// 
        public static float GetPointToLineDistance(Vector2 point, Vector2 lineStart, Vector2 lineEnd)
        {
            Vector2 line = lineEnd - lineStart;
            Vector2 v = point - lineStart;
            return Vector3.Cross(line.normalized, v).magnitude;
        }
    }
}