Beispiel #1
0
        /// <summary>
        /// Gibt zurück ob zwei Flächen miteinander Kollidieren können(Achtung noch keine gedrehten Flächen)
        /// </summary>
        /// <param name="p1">Fläche 1</param>
        /// <param name="p2">Fläche 2</param>
        /// <returns>Ergebnis der Kollisions</returns>
        public static bool Intersect(CollisionPlane p1, CollisionPlane p2)
        {
            //TODO: Erweitern auf schräge Fläche
            var vec = p1.normal * p2.normal;

            bool result = false;

            if (vec.X < 0)
            {
                var ry = (p2.edgepos1.Y > p1.edgepos1.Y && p2.edgepos1.Y < p1.edgepos2.Y) ||
                         (p2.edgepos2.Y <p1.edgepos2.Y && p2.edgepos2.Y> p1.edgepos1.Y) ||
                         (p1.edgepos1.Y > p2.edgepos1.Y && p1.edgepos1.Y < p2.edgepos2.Y) ||
                         (p1.edgepos2.Y <p2.edgepos2.Y && p1.edgepos2.Y> p2.edgepos1.Y);

                var rz = (p2.edgepos1.Z > p1.edgepos1.Z && p2.edgepos1.Z < p1.edgepos2.Z) ||
                         (p2.edgepos2.Z <p1.edgepos2.Z && p2.edgepos2.Z> p1.edgepos1.Z) ||
                         (p1.edgepos1.Z > p2.edgepos1.Z && p1.edgepos1.Z < p2.edgepos2.Z) ||
                         (p1.edgepos2.Z <p2.edgepos2.Z && p1.edgepos2.Z> p2.edgepos1.Z);

                result = rz && ry;
            }
            else if (vec.Y < 0)
            {
                var rx = (p2.edgepos1.X > p1.edgepos1.X && p2.edgepos1.X < p1.edgepos2.X) ||
                         (p2.edgepos2.X <p1.edgepos2.X && p2.edgepos2.X> p1.edgepos1.X) ||
                         (p1.edgepos1.X > p2.edgepos1.X && p1.edgepos1.X < p2.edgepos2.X) ||
                         (p1.edgepos2.X <p2.edgepos2.X && p1.edgepos2.X> p2.edgepos1.X);

                var rz = (p2.edgepos1.Z > p1.edgepos1.Z && p2.edgepos1.Z < p1.edgepos2.Z) ||
                         (p2.edgepos2.Z <p1.edgepos2.Z && p2.edgepos2.Z> p1.edgepos1.Z) ||
                         (p1.edgepos1.Z > p2.edgepos1.Z && p1.edgepos1.Z < p2.edgepos2.Z) ||
                         (p1.edgepos2.Z <p2.edgepos2.Z && p1.edgepos2.Z> p2.edgepos1.Z);


                result = rx && rz;
            }
            else if (vec.Z < 0)
            {
                var rx = (p2.edgepos1.X > p1.edgepos1.X && p2.edgepos1.X < p1.edgepos2.X) ||
                         (p2.edgepos2.X <p1.edgepos2.X && p2.edgepos2.X> p1.edgepos1.X) ||
                         (p1.edgepos1.X > p2.edgepos1.X && p1.edgepos1.X < p2.edgepos2.X) ||
                         (p1.edgepos2.X <p2.edgepos2.X && p1.edgepos2.X> p2.edgepos1.X);

                var ry = (p2.edgepos1.Y > p1.edgepos1.Y && p2.edgepos1.Y < p1.edgepos2.Y) ||
                         (p2.edgepos2.Y <p1.edgepos2.Y && p2.edgepos2.Y> p1.edgepos1.Y) ||
                         (p1.edgepos1.Y > p2.edgepos1.Y && p1.edgepos1.Y < p2.edgepos2.Y) ||
                         (p1.edgepos2.Y <p2.edgepos2.Y && p1.edgepos2.Y> p2.edgepos1.Y);

                result = rx && ry;
            }

            return(result);
        }
Beispiel #2
0
        /// <summary>
        /// Gibt den Abstand zweier Flächen zurück(Mittelpunkt zu Mittelpunkt)
        /// </summary>
        /// <param name="p1">Fläche 1</param>
        /// <param name="p2">Fläche 2</param>
        /// <returns>Abstand der Flächen zueinander</returns>
        public static Vector3 GetDistance(CollisionPlane p1, CollisionPlane p2)
        {
            var alpha = p1.normal * p2.normal;


            var dvector = new Vector3();

            dvector.X = alpha.X != 0 ? 1 : 0;
            dvector.Y = alpha.Y != 0 ? 1 : 0;
            dvector.Z = alpha.Z != 0 ? 1 : 0;

            var distance = (p1.pos - p2.pos) * dvector;

            return(distance);
        }
Beispiel #3
0
        /// <summary>
        /// Gibt zurück ob zwei Flächen miteinander Kollidieren können(Achtung noch keine gedrehten Flächen)
        /// </summary>
        /// <param name="p1">Fläche 1</param>
        /// <param name="p2">Fläche 2</param>
        /// <returns>Ergebnis der Kollisions</returns>
        public static bool Intersect(CollisionPlane p1, CollisionPlane p2)
        {
            //TODO: Erweitern auf schräge Fläche
            var vec = p1.normal * p2.normal;

            bool result = false;

            if (vec.X < 0)
            {
                var ry = (p2.edgepos1.Y > p1.edgepos1.Y && p2.edgepos1.Y < p1.edgepos2.Y) ||
                         (p2.edgepos2.Y < p1.edgepos2.Y && p2.edgepos2.Y > p1.edgepos1.Y) ||
                         (p1.edgepos1.Y > p2.edgepos1.Y && p1.edgepos1.Y < p2.edgepos2.Y) ||
                         (p1.edgepos2.Y < p2.edgepos2.Y && p1.edgepos2.Y > p2.edgepos1.Y);

                var rz = (p2.edgepos1.Z > p1.edgepos1.Z && p2.edgepos1.Z < p1.edgepos2.Z) ||
                         (p2.edgepos2.Z < p1.edgepos2.Z && p2.edgepos2.Z > p1.edgepos1.Z) ||
                         (p1.edgepos1.Z > p2.edgepos1.Z && p1.edgepos1.Z < p2.edgepos2.Z) ||
                         (p1.edgepos2.Z < p2.edgepos2.Z && p1.edgepos2.Z > p2.edgepos1.Z);

                result = rz && ry;
            }
            else if (vec.Y < 0)
            {
                var rx = (p2.edgepos1.X > p1.edgepos1.X && p2.edgepos1.X < p1.edgepos2.X) ||
                         (p2.edgepos2.X < p1.edgepos2.X && p2.edgepos2.X > p1.edgepos1.X) ||
                         (p1.edgepos1.X > p2.edgepos1.X && p1.edgepos1.X < p2.edgepos2.X) ||
                         (p1.edgepos2.X < p2.edgepos2.X && p1.edgepos2.X > p2.edgepos1.X);

                var rz = (p2.edgepos1.Z > p1.edgepos1.Z && p2.edgepos1.Z < p1.edgepos2.Z) ||
                         (p2.edgepos2.Z < p1.edgepos2.Z && p2.edgepos2.Z > p1.edgepos1.Z) ||
                         (p1.edgepos1.Z > p2.edgepos1.Z && p1.edgepos1.Z < p2.edgepos2.Z) ||
                         (p1.edgepos2.Z < p2.edgepos2.Z && p1.edgepos2.Z > p2.edgepos1.Z);

                result = rx && rz;
            }
            else if (vec.Z < 0)
            {
                var rx = (p2.edgepos1.X > p1.edgepos1.X && p2.edgepos1.X < p1.edgepos2.X) ||
                        (p2.edgepos2.X < p1.edgepos2.X && p2.edgepos2.X > p1.edgepos1.X) ||
                        (p1.edgepos1.X > p2.edgepos1.X && p1.edgepos1.X < p2.edgepos2.X) ||
                        (p1.edgepos2.X < p2.edgepos2.X && p1.edgepos2.X > p2.edgepos1.X);

                var ry = (p2.edgepos1.Y > p1.edgepos1.Y && p2.edgepos1.Y < p1.edgepos2.Y) ||
                         (p2.edgepos2.Y < p1.edgepos2.Y && p2.edgepos2.Y > p1.edgepos1.Y) ||
                         (p1.edgepos1.Y > p2.edgepos1.Y && p1.edgepos1.Y < p2.edgepos2.Y) ||
                         (p1.edgepos2.Y < p2.edgepos2.Y && p1.edgepos2.Y > p2.edgepos1.Y);

                result = rx && ry;
            }

            return result;
        }
Beispiel #4
0
        /// <summary>
        /// Gibt den Abstand zweier Flächen zurück(Mittelpunkt zu Mittelpunkt)
        /// </summary>
        /// <param name="p1">Fläche 1</param>
        /// <param name="p2">Fläche 2</param>
        /// <returns>Abstand der Flächen zueinander</returns>
        public static Vector3 GetDistance(CollisionPlane p1, CollisionPlane p2)
        {
            var alpha = p1.normal * p2.normal;

            var dvector = new Vector3();
            dvector.X = alpha.X != 0 ? 1 : 0;
            dvector.Y = alpha.Y != 0 ? 1 : 0;
            dvector.Z = alpha.Z != 0 ? 1 : 0;

            var distance = (p1.pos - p2.pos) * dvector;

            return distance;
        }