Ejemplo n.º 1
0
        public bool Intersect(LineSegment l, out Vector2 pt, out Vector2 K)
        {
            Vector2 P = P1 - P0;
            Vector2 S = l.P1 - l.P0;

            Matrix2 A = new Matrix2(P.X, -S.X, P.Y, -S.Y);

            if (Math.Abs(A.Determinant()) < 1e-10)
            {
                pt = default(Vector2);
                K  = default(Vector2);
                return(false);
            }

            K = A.Inverse() * (l.P0 - P0);

            if (K.X >= 0 && K.X <= 1 && K.Y >= 0 && K.Y <= 1)
            {
                pt = P0 + P * K.X;
                return(true);
            }
            else
            {
                pt = default(Vector2);
                return(false);
            }
        }
Ejemplo n.º 2
0
        public static Circle FromLines(Line oncircle, Line toline, out Vector2 tolinePoint)
        {
            tolinePoint = default(Vector2);

            Vector2 m = (oncircle.P1 - oncircle.P0).Normalize();
            Vector2 u = (toline.P1 - toline.P0).Normalize();

            if (Math.Abs(m.Cross(u)) < 1e-10)
            {
                return(Circle.Infinite);
            }

            Vector2 c = m.Rotate90();
            Vector2 t = u.Rotate90();

            Vector2 t_c = t - c;

            Matrix2 A = new Matrix2(
                u.X, t_c.X,
                u.Y, t_c.Y);

            Vector2 d = oncircle.P0 - toline.P0;

            if (Math.Abs(A.Determinant()) < 1e-10)
            {
                return(Circle.Infinite);
            }

            Vector2 pvec = A.Inverse() * d;

            Vector2 center = oncircle.P0 + pvec.Y * c;

            tolinePoint = toline.P0 + pvec.X * u;
            return(new Circle(Math.Abs(pvec.Y), center));
        }
Ejemplo n.º 3
0
        public void DeterminantIsCorrectFor2x2()
        {
            // Arrange
            var matrix = new Matrix2(3, 5, -2, 3);

            // Act
            var result = matrix.Determinant();

            // Assert
            Assert.AreEqual(19, result);
        }
Ejemplo n.º 4
0
        public void Determinant_ShouldReturnExpectedValue()
        {
            // arrange
            var sut = new Matrix2(new[, ] {
                { 1f, 5f }, { -3f, 2f }
            });

            // act
            var result = sut.Determinant();

            // assert
            result.Should().Be(17);
        }