/// <summary> /// check if two roads intersect with each other using overlapping /// </summary> /// <param name="road1">Road1.</param> /// <param name="road2">Road2.</param> bool intersect(Road road1, Road road2) { GameObject road1Obj = Instantiate(road1.roadType, road1.postion + road1.startPos, road1.Rotation) as GameObject; GameObject road2Obj = Instantiate(road2.roadType, road2.postion + road2.startPos, road2.Rotation) as GameObject; road1Obj.transform.position = road1.postion + road1.startPos; road2Obj.transform.position = road2.postion + road2.startPos; road1Obj.transform.eulerAngles = road1.Rotation.eulerAngles; road2Obj.transform.eulerAngles = road2.Rotation.eulerAngles; Vector3 BoxObj1Min = road1Obj.GetComponent <BoxCollider>().bounds.min; Vector3 BoxObj1Max = road1Obj.GetComponent <BoxCollider>().bounds.max; Vector3 BoxObj2Min = road2Obj.GetComponent <BoxCollider>().bounds.min; Vector3 BoxObj2Max = road2Obj.GetComponent <BoxCollider>().bounds.max; Myx Box1x = new Myx(); Myx Box2x = new Myx(); Myx Box1y = new Myx(); Myx Box2y = new Myx(); Myx Box1z = new Myx(); Myx Box2z = new Myx(); Box1x.xmin = BoxObj1Min.x; Box1x.xmax = BoxObj1Max.x; Box1y.xmin = BoxObj1Min.y; Box1y.xmax = BoxObj1Max.y; Box1z.xmin = BoxObj1Min.z; Box1z.xmax = BoxObj1Max.z; Box2x.xmin = BoxObj2Min.x; Box2x.xmax = BoxObj2Max.x; Box2y.xmin = BoxObj2Min.y; Box2y.xmax = BoxObj2Max.y; Box2z.xmin = BoxObj2Min.z; Box2z.xmax = BoxObj2Max.z; Destroy(road1Obj); Destroy(road2Obj); return(overlapping3D(Box1x, Box2x, Box1y, Box2y, Box1z, Box2z)); }
bool overlapping3D(Myx x1, Myx x2, Myx y1, Myx y2, Myx z1, Myx z2) { return(overlapping1D(x1, x2) && overlapping1D(y1, y2) && overlapping1D(z1, z2)); }
bool overlapping2D(Myx x1, Myx x2, Myx y1, Myx y2) { return(overlapping1D(x1, x2) && overlapping1D(y1, y2)); }
bool overlapping1D(Myx x1, Myx x2) { return(x1.xmax >= x2.xmin && x2.xmax >= x1.xmin); }