Пример #1
0
        /// <summary>
        /// Возвращает повернутую DeltaRepresentation на заданный угол относительно заданной точки
        /// </summary>
        public DeltaRepresentation GetTurnedDelta(double angle)
        {
            if (angle == 0)
            {
                return(this);
            }
            DeltaRepresentation res = new DeltaRepresentation();

            res.angle = this.angle + angle;

            List <Point> newDeltas = new List <Point>();

            double cosAngle = Math.Cos(angle);
            double sinAngle = Math.Sin(angle);


            foreach (Point p_old in deltas)
            {
                double newX = p_old.X * cosAngle + p_old.Y * sinAngle;
                double newY = p_old.X * sinAngle + p_old.Y * cosAngle;

                newDeltas.Add(new Point((int)newX, (int)newY));
                // также добавляем точки вокруг, чтобы устранить дырки
                newDeltas.Add(new Point((int)newX + 1, (int)newY));
                newDeltas.Add(new Point((int)newX - 1, (int)newY));
            }

            // Попытка не убирать дубликаты, а обработать этот случай на моменте с превращением в сегменты
            res.deltas = newDeltas;//.Distinct().ToList();

            return(res);
        }
Пример #2
0
        /// <summary>
        /// Загрузка дельт из картинки
        /// </summary>
        /// <param name="borderDistance">Количество пикселей прироста в ширине фигуры</param>
        private void LoadFigureFromItsBitmap(int borderDistance)
        {
            noScaling = new DeltaRepresentation(bitmap, figColor);
            if (noScaling.deltas.Count == 0)
            {
                throw new Exception("Empty figure, maybe different color?");
            }
            ;

            if (borderDistance == 0)
            {
                withBorderDistance = noScaling;
            }
            else
            {
                withBorderDistance = new DeltaRepresentation(bitmap, figColor, borderDistance);
            }
        }
Пример #3
0
 /// <summary>
 /// Перезагружает withBorderDistance для нового количества дополнительных пикселей
 /// </summary>
 /// <param name="borderDistance">Количество доп пикселей с каждой из сторон</param>
 public void ChangeBorderDistance(int borderDistance)
 {
     withBorderDistance = new DeltaRepresentation(bitmap, figColor, borderDistance);
 }