예제 #1
0
        public static matrix Line(complex z1, complex z2)//m(0,0) = A, m(0,1)=B,m(0,2)=C
        {
            matrix m = new matrix(1, 3);

            m.SetAt(0, 0, z2.imag() - z1.imag());
            m.SetAt(0, 1, z1.real() - z2.real());
            m.SetAt(0, 2, -z1.real() * m.GetAt(0, 0) - z1.imag() * m.GetAt(0, 1));
            return(m);
        }
예제 #2
0
        public UCS(quaternion O, quaternion Xort, quaternion Yort)
        {
            o = O;

            quaternion I = new quaternion(0.0, (Xort - O).imag());
            quaternion K = new quaternion(0.0, (I * (Yort - O)).imag());
            quaternion J = new quaternion(0.0, (K * I).imag());


            ang.SetAt(1, 1, I.cosToX());
            ang.SetAt(1, 2, J.cosToX());
            ang.SetAt(1, 3, K.cosToX());
            ang.SetAt(2, 1, I.cosToY());
            ang.SetAt(2, 2, J.cosToY());
            ang.SetAt(2, 3, K.cosToY());
            ang.SetAt(3, 1, I.cosToZ());
            ang.SetAt(3, 2, J.cosToZ());
            ang.SetAt(3, 3, K.cosToZ());
        }
예제 #3
0
        public static matrix IntersectCircleAndLine(double r, complex z1, complex z2)
        //m(0,0) = X1, m(0,1)=Y1, m(0,2)=X2, m(0,3) = Y2, m(0,4) < 0 ako nema presi4ane
        {
            matrix m = new matrix(1, 5);
            matrix L = Line(z1, z2);
            double a, b, c, A, B, C;

            A = L.GetAt(0, 0); B = L.GetAt(0, 1); C = L.GetAt(0, 2);
            if (A != 0.0)
            {
                #region
                a = B * B / (A * A) + 1;
                b = 2 * B * C / (A * A);
                c = C * C / (A * A) - r * r;

                double D = b * b - 4 * a * c;
                if (D >= 0)
                {
                    D = Math.Sqrt(D);
                    m.SetAt(0, 1, (-b + D) / (2 * a));
                    m.SetAt(0, 3, (-b - D) / (2 * a));
                    m.SetAt(0, 0, (-C - B * m.GetAt(0, 1)) / A);
                    m.SetAt(0, 2, (-C - B * m.GetAt(0, 3)) / A);
                }
                else
                {
                    m.SetAt(0, 0, 0); m.SetAt(0, 1, 0); m.SetAt(0, 2, 0); m.SetAt(0, 3, 0);
                    m.SetAt(0, 4, -1);
                }
                #endregion
            }
            else
            {
                #region
                a = A * A / (B * B) + 1;
                b = 2 * A * C / (B * B);
                c = C * C / (B * B) - r * r;
                double D = b * b - 4 * a * c;

                if (D >= 0)
                {
                    D = Math.Sqrt(D);
                    m.SetAt(0, 0, (-b + D) / (2 * a));
                    m.SetAt(0, 2, (-b - D) / (2 * a));
                    m.SetAt(0, 1, (-C - A * m.GetAt(0, 0)) / B);
                    m.SetAt(0, 3, (-C - A * m.GetAt(0, 2)) / B);
                }
                else
                {
                    m.SetAt(0, 0, 0); m.SetAt(0, 1, 0); m.SetAt(0, 2, 0); m.SetAt(0, 3, 0);
                    m.SetAt(0, 4, -1);
                }
                #endregion
            }
            return(m);
        }