using System; using System.Collections.Generic; using o0.Geometry2D; using o0.Geometry2D.Float; using UnityEngine; namespace ZIM { // 屏幕识别使用,记录摄像机画面内的四边形 public class QuadrilateralInCamera { public Vector2 CameraSize; public OrdinalQuadrilateral2 Quad; public QuadrilateralInCamera(Vector2 a, Vector2 b, Vector2 c, Vector2 d, Vector2 cameraSize) { CameraSize = cameraSize; Quad = new OrdinalQuadrilateral2(a.o0Vector(), b.o0Vector(), c.o0Vector(), d.o0Vector()); } public QuadrilateralInCamera(Vector a, Vector b, Vector c, Vector d, Vector cameraSize) { CameraSize = cameraSize.UnityVector(); Quad = new OrdinalQuadrilateral2(a, b, c, d); } public QuadrilateralInCamera(IEnumerable enumable, Vector2 cameraSize) { CameraSize = cameraSize; Quad = new OrdinalQuadrilateral2(enumable); } public QuadrilateralInCamera(OrdinalQuadrilateral2 quad, Vector2 cameraSize) { CameraSize = cameraSize; Quad = quad; } // 四边形是否完整的在屏幕内 public bool IsQuadComplete() { if (Quad.A.x < Quad.B.x && Quad.A.y < Quad.C.y && Quad.B.y < Quad.D.y && Quad.C.x < Quad.D.x && Quad.A.x > 0 && Quad.A.y > 0 && Quad.B.x < CameraSize.x && Quad.B.y > 0 && Quad.C.x > 0 && Quad.C.y < CameraSize.y && Quad.D.x < CameraSize.x && Quad.D.y < CameraSize.y) return true; return false; } public List GetVertexList() { return new List() { new Vector2(Quad[0].x / CameraSize.x, Quad[0].y / CameraSize.y), new Vector2(Quad[1].x / CameraSize.x, Quad[1].y / CameraSize.y), new Vector2(Quad[2].x / CameraSize.x, Quad[2].y / CameraSize.y), new Vector2(Quad[3].x / CameraSize.x, Quad[3].y / CameraSize.y) }; } } }