using UnityEngine; using System.Collections; using System.Collections.Generic; using Unity.Collections; namespace Pinwheel.Poseidon { public static class PGeometryUtilities { public static bool IsIntersectHorizontalLine( float x1, float y1, float x2, float y2, float lineY, out Vector2 intersection) { bool isIntersect = false; intersection = Vector2.zero; float minX = Mathf.Min(x1, x2); float maxX = Mathf.Max(x1, x2); float minY = Mathf.Min(y1, y2); float maxY = Mathf.Max(y1, y2); if (lineY < minY || lineY > maxY) { isIntersect = false; return isIntersect; } if (x1 == x2 && y1 == y2) { if (lineY == y1) { isIntersect = true; intersection.Set(x1, y1); return isIntersect; } else { isIntersect = false; } } Vector2 direction = new Vector2(x2 - x1, y2 - y1).normalized; Vector3 normal = new Vector3(-direction.y, direction.x); if (direction == Vector2.left || direction == Vector2.right) { isIntersect = false; return isIntersect; } float num = (x2 - x1) * lineY + (x1 * y2 - x2 * y1); float denom = -y1 + y2; float intersectX = num / denom; if (intersectX >= minX && intersectX <= maxX) { intersection.Set(intersectX, lineY); isIntersect = true; return isIntersect; } isIntersect = false; return isIntersect; } } }