Example #1
0
        public static Vector3 UnitCross(ref Vector3 vector, ref Vector3 value)
        {
            Vector3 result = new Vector3(vector.y * value.z - vector.z * value.y, vector.z * value.x - vector.x * value.z, vector.x * value.y - vector.y * value.x);

            Vector3ex.Normalize(ref result, 1E-05f);
            return(result);
        }
Example #2
0
        public static bool CreateInscribed(Vector3 v0, Vector3 v1, Vector3 v2, Vector3 v3, out Sphere3 sphere)
        {
            Vector3 vector  = v1 - v0;
            Vector3 vector2 = v2 - v0;
            Vector3 vector3 = v3 - v0;
            Vector3 value   = v2 - v1;
            Vector3 vector4 = v3 - v1;
            Vector3 vector5 = vector4.Cross(value);
            Vector3 vector6 = vector2.Cross(vector3);
            Vector3 vector7 = vector3.Cross(vector);
            Vector3 vector8 = vector.Cross(vector2);

            if (Mathf.Abs(Vector3ex.Normalize(ref vector5, 1E-05f)) < 1E-05f)
            {
                sphere = default(Sphere3);
                return(false);
            }
            if (Mathf.Abs(Vector3ex.Normalize(ref vector6, 1E-05f)) < 1E-05f)
            {
                sphere = default(Sphere3);
                return(false);
            }
            if (Mathf.Abs(Vector3ex.Normalize(ref vector7, 1E-05f)) < 1E-05f)
            {
                sphere = default(Sphere3);
                return(false);
            }
            if (Mathf.Abs(Vector3ex.Normalize(ref vector8, 1E-05f)) < 1E-05f)
            {
                sphere = default(Sphere3);
                return(false);
            }
            float[,] array = new float[3, 3];
            array[0, 0]    = vector6.x - vector5.x;
            array[0, 1]    = vector6.y - vector5.y;
            array[0, 2]    = vector6.z - vector5.z;
            array[1, 0]    = vector7.x - vector5.x;
            array[1, 1]    = vector7.y - vector5.y;
            array[1, 2]    = vector7.z - vector5.z;
            array[2, 0]    = vector8.x - vector5.x;
            array[2, 1]    = vector8.y - vector5.y;
            array[2, 2]    = vector8.z - vector5.z;
            float[,] a     = array;
            float[] b = new float[]
            {
                0f,
                0f,
                -vector8.Dot(vector3)
            };
            Vector3 vector9;

            if (LinearSystem.Solve3(a, b, out vector9, 1E-05f))
            {
                sphere.Center = v3 + vector9;
                sphere.Radius = Mathf.Abs(vector5.Dot(vector9));
                return(true);
            }
            sphere = default(Sphere3);
            return(false);
        }
        public void UpdateEdge(int edgeIndex)
        {
            Vector3 vector = (this._edges[edgeIndex].Point1 = this._vertices[(edgeIndex + 1) % this._vertices.Length]) - (this._edges[edgeIndex].Point0 = this._vertices[edgeIndex]);

            this._edges[edgeIndex].Length    = Vector3ex.Normalize(ref vector, 1E-05f);
            this._edges[edgeIndex].Direction = vector;
            this._edges[edgeIndex].Normal    = this._plane.Normal.Cross(vector);
        }
        public void UpdateEdges()
        {
            int num  = this._vertices.Length;
            int num2 = num - 1;

            for (int i = 0; i < num; i++)
            {
                Vector3 vector = (this._edges[num2].Point1 = this._vertices[i]) - (this._edges[num2].Point0 = this._vertices[num2]);
                this._edges[num2].Length    = Vector3ex.Normalize(ref vector, 1E-05f);
                this._edges[num2].Direction = vector;
                this._edges[num2].Normal    = this._plane.Normal.Cross(vector);
                num2 = i;
            }
        }
        public static Rectangle3 CreateFromCWPoints(Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3)
        {
            Vector3    vector  = p2 - p1;
            Vector3    vector2 = p1 - p0;
            Rectangle3 result;

            result.Center    = (p0 + p2) * 0.5f;
            result.Extents.x = Vector3ex.Normalize(ref vector, 1E-05f) * 0.5f;
            result.Extents.y = Vector3ex.Normalize(ref vector2, 1E-05f) * 0.5f;
            result.Axis0     = vector;
            result.Axis1     = vector2;
            result.Normal    = vector.Cross(vector2);
            return(result);
        }
Example #6
0
        public float AngleBetweenPlaneAndLine(Vector3 direction)
        {
            Vector3ex.Normalize(ref direction, 1E-05f);
            float num = this.Normal.Dot(direction);

            if (num > 1f)
            {
                num = 1f;
            }
            else if (num < -1f)
            {
                num = -1f;
            }
            return(1.57079637f - Mathf.Acos(num));
        }
Example #7
0
        public static float AngleRad(this Vector3 vector, Vector3 target)
        {
            Vector3ex.Normalize(ref vector, 1E-05f);
            Vector3ex.Normalize(ref target, 1E-05f);
            float num = vector.x * target.x + vector.y * target.y + vector.z * target.z;

            if (num > 1f)
            {
                num = 1f;
            }
            else if (num < -1f)
            {
                num = -1f;
            }
            return(Mathf.Acos(num));
        }
Example #8
0
        public static float SignedAngleRad(this Vector3 vector, Vector3 target, Vector3 normal)
        {
            Vector3ex.Normalize(ref vector, 1E-05f);
            Vector3ex.Normalize(ref target, 1E-05f);
            float num = vector.x * target.x + vector.y * target.y + vector.z * target.z;

            if (num > 1f)
            {
                num = 1f;
            }
            else if (num < -1f)
            {
                num = -1f;
            }
            float   num2  = Mathf.Acos(num);
            Vector3 value = vector.Cross(target);

            if (normal.Dot(value) < 0f)
            {
                num2 = -num2;
            }
            return(num2);
        }