Beispiel #1
0
 public Vector2D(Coordinate2D startCoord, Coordinate2D endCoord)
 {
     X = endCoord.X - startCoord.X;
     Y = endCoord.Y - startCoord.Y;
     A = startCoord;
 }
Beispiel #2
0
 public Vector2D(Coordinate2D c)
 {
     X = c.X;
     Y = c.Y;
     A = new Coordinate2D(0, 0);
 }
Beispiel #3
0
 /// <summary>
 ///     Calculates distance of the orthogonal projection for point
 /// </summary>
 /// <param name="coordinate"></param>
 /// <returns></returns>
 public double calcDistanceToPoint(Coordinate2D coordinate)
 {
     return((A * coordinate.X + B * coordinate.Y + C) / (Math.Sqrt(A * A + B * B)));
 }
Beispiel #4
0
        public Vector2D copy()
        {
            var startCopy = new Coordinate2D(A.X, A.Y);

            return(new Vector2D(startCopy, B));
        }
Beispiel #5
0
 /// <summary>
 ///     Показывает, что проверяемая точка лежит в положительной полуплоскости данной прямой.
 ///     Положительная полуплоскость образована прямой и вектором нормали.
 ///     Т.е. точка должна лежать с той же стороны, в которую направлен вектор нормали данной прямой.
 ///     Т.о. точка будет иметь положительное решение если она лежит в той полуплоскости куда направлен вектор норали.
 /// </summary>
 /// <param name="point"></param>
 /// <returns></returns>
 public bool isPointBelongs(Coordinate2D point)
 {
     return(Math.Abs(distanceToPoint(point)) < EPSILON);
 }
Beispiel #6
0
 public double distanceToPoint(Coordinate2D p)
 {
     return(solveForPoint(p) / Math.Sqrt(A * A + B * B));
 }
Beispiel #7
0
 public double solveForPoint(Coordinate2D p)
 {
     return(A * p.X + B * p.Y + C);
 }
Beispiel #8
0
        /// <summary>
        ///     Показывает, что проверяемая точка лежит в положительной полуплоскости данной прямой.
        ///     Положительная полуплоскость образована прямой и вектором нормали.
        ///     Т.е. точка должна лежать с той же стороны, в которую направлен вектор нормали данной прямой.
        ///     Т.о. точка будет иметь положительное решение если она лежит в той полуплоскости куда направлен вектор норали.
        /// </summary>
        /// <param name="point"></param>
        /// <returns></returns>
        public bool isPointBelongsToPositiveHalfPlane(Coordinate2D point)
        {
            var equatiorResult = solveForPoint(point);

            return(equatiorResult > 0 || Math.Abs(equatiorResult) < EPSILON);
        }
Beispiel #9
0
        /// <summary>
        ///     Прямая заданная своим уравнением (коэффициенты A,B,C и вектор нормали)
        /// </summary>
        /// <param name="name"></param>
        /// <param name="a"></param>
        /// <param name="b"></param>
        /// <param name="c"></param>
        /// <param name="normalCopy"></param>
        /// <param name="basicPointCopy">координаты базовой точки на прямой (см описание basicPoint)</param>
        /// <param name="bezieTantengPointCopy"></param>
        /// <param name="userData"></param>
        private Line2D(string name, double a, double b, double c, Vector2D normalCopy, Coordinate2D basicPointCopy,
                       Coordinate2D bezieTantengPointCopy, object userData)
        {
            UserData = userData;

            A                   = a;
            B                   = b;
            C                   = c;
            _name               = name;
            Normal              = normalCopy;
            BasicPoint          = basicPointCopy;
            BezieTangentPoint   = bezieTantengPointCopy;
            _intersectionPoints = new Dictionary <Line2D, Coordinate2D>();
        }
Beispiel #10
0
 /// <summary>
 /// Проверяет что абсцисса точки  point между абсциссами конца отрезка
 /// </summary>
 /// <param name="testPoint"></param>
 /// <returns></returns>
 private bool isHorizontallyIncluded(Coordinate2D testPoint)
 {
     return((testPoint.X >= A.X && testPoint.X <= B.X) || ((testPoint.X <= A.X && testPoint.X >= B.X)));
 }
Beispiel #11
0
 /// <summary>
 /// Проверяет что ордината точки  point между ординатами конца отрезка
 /// </summary>
 /// <param name="point"></param>
 /// <returns></returns>
 private bool isVerticallyIncluded(Coordinate2D point)
 {
     return((point.Y >= A.Y && point.Y <= B.Y) || ((point.Y <= A.Y && point.Y >= B.Y)));
 }
Beispiel #12
0
 /// <summary>
 /// </summary>
 /// <param name="point"></param>
 /// <returns>TRUE если точка лежит на данном отрезке</returns>
 public bool contains(Coordinate2D point)
 {
     return(isHorizontallyIncluded(point) && isVerticallyIncluded(point) && directLine.isPointBelongs(point));
 }
Beispiel #13
0
 public LineSegment(Coordinate2D p1, Coordinate2D p2)
 {
     A          = p1;
     B          = p2;
     directLine = new Line2D(A, B, "", null);
 }