public static bool IsRayInsectAABB3(Vector3 rayOrigin, Vector3 rayDirection, Vector3 min, Vector3 max, ref GeoInsectPointArrayInfo insect) { bool isInsect = GeoLineUtils.IsLineInsectAABB3(rayOrigin, rayDirection + rayOrigin, min, max, ref insect); if (isInsect) { List <Vector3> tmp = new List <Vector3>(); List <Vector3> tmp1 = insect.mHitGlobalPoint.mPointArray; for (int i = 0; i < tmp1.Count; ++i) { Vector3 v = tmp1[i]; if (GeoRayUtils.IsPointInRay3(rayOrigin, rayDirection, ref v)) { tmp.Add(v); } } if (tmp.Count > 0) { insect.mHitGlobalPoint.mPointArray = tmp; insect.mHitGlobalPoint.mPointArray.Sort((v1, v2) => { return((v1 - rayOrigin).sqrMagnitude.CompareTo((v2 - rayOrigin).sqrMagnitude)); }); } else { insect.mIsIntersect = false; } } return(insect.mIsIntersect); }
public static bool IsRayInsectAABB2(Vector2 rayOrigin, Vector2 rayDirection, Vector2 min, Vector2 max, ref GeoInsectPointArrayInfo insect) { bool isInsect = GeoLineUtils.IsLineInsectAABB2(rayOrigin, rayDirection + rayOrigin, min, max, ref insect); if (isInsect) { List <Vector3> tmp = new List <Vector3>(); foreach (Vector3 v in insect.mHitGlobalPoint.mPointArray) { Vector2 v2 = new Vector2(v.x, v.y); if (GeoRayUtils.IsPointInRay2(rayOrigin, rayDirection, ref v2)) { tmp.Add(v); } } if (tmp.Count > 0) { insect.mHitGlobalPoint.mPointArray = tmp; } else { insect.mIsIntersect = false; } } return(insect.mIsIntersect); }
public float IsRayIntersect(Vector2 pos, Vector2 dir) { float d = 1e10f; GeoInsectPointInfo info = new GeoInsectPointInfo(); if (GeoRayUtils.IsRayInsectSegment2(pos, dir, mP1, mP2, ref info)) { d = info.mLength; } info = new GeoInsectPointInfo(); if (GeoRayUtils.IsRayInsectSegment2(pos, dir, mP3, mP2, ref info)) { d = Math.Min(d, info.mLength); } info = new GeoInsectPointInfo(); if (GeoRayUtils.IsRayInsectSegment2(pos, dir, mP1, mP4, ref info)) { d = Math.Min(d, info.mLength); } info = new GeoInsectPointInfo(); if (GeoRayUtils.IsRayInsectSegment2(pos, dir, mP3, mP4, ref info)) { d = Math.Min(d, info.mLength); } return(d); }
public static bool IsAABBInsectRay3(Vector3 min, Vector3 max, Vector3 rayOrigin, Vector3 rayDirection, ref GeoInsectPointArrayInfo insect) { return(GeoRayUtils.IsRayInsectAABB3(rayOrigin, rayDirection, min, max, ref insect)); }
public static bool IsTriangleInsectRay3(Vector3 p1, Vector3 p2, Vector3 p3, Vector3 rayOrigin, Vector3 rayDirection, ref GeoInsectPointInfo insect) { return(GeoRayUtils.IsRayInsectTriangle3(rayOrigin, rayDirection, p1, p2, p3, ref insect)); }
public static bool IsTriangleInsectRay2(Vector2 p1, Vector2 p2, Vector2 p3, Vector2 rayOrigin, Vector2 rayDirection, ref GeoInsectPointInfo insect) { return(GeoRayUtils.IsRayInsectLine2(rayOrigin, rayDirection, rayOrigin, rayDirection, ref insect)); }