コード例 #1
0
        public MarkGeometrySpline(Spline spline)
            : base()
        {
            FitPoints     = spline.FitPoints.ConvertAll(x => new MarkGeometryPoint(x));
            ControlPoints = new List <SplineVertex>(spline.ControlPoints).ConvertAll(x => new MarkGeometryPoint(x.Position));;
            Knots         = spline.Knots.ToList();
            IsPeriodic    = spline.IsPeriodic;
            IsClosed      = spline.IsClosed;
            Degree        = spline.Degree;

            // TODO : Remove
            var polyline = spline.ToPolyline(spline.ControlPoints.Count * 5);

            Points.AddRange(
                polyline.Vertexes.Select(v => new MarkGeometryPoint(v.Position))
                );

            if (
                polyline.IsClosed &&
                GeometricArithmeticModule.Compare(StartPoint, EndPoint, ClosureTolerance) != 0)
            {
                Points.Add((MarkGeometryPoint)StartPoint.Clone());
            }
            // END Remove

            Update();
        }
コード例 #2
0
 public GeneralizedDrawingPrimitive(CgmFile container, int id, CgmPoint[] points, string data)
     : this(container)
 {
     Identifier = id;
     Points.AddRange(points);
     DataRecord = data;
 }
コード例 #3
0
 public void Perform()
 {
     DataPoint[] pts = this.Points.OrderBy(p => p.X).ToArray();
     this.Points.Clear();
     Points.AddRange(pts);
     LineStyle = (LineStyle)(int)SeriesLineStyle;
 }
コード例 #4
0
 public Rectangle(Point point1, Point point2, Point point3, Point point4)
     : base("Rectangle", point1)
 {
     Points.AddRange(new List <Point> {
         point2, point3, point4
     });
 }
コード例 #5
0
ファイル: Polygon.cs プロジェクト: lukemuszynski/grafika001
 public void AddVerticle(Point[] p, bool drawLines = false)
 {
     Points.AddRange(p);
     if (drawLines)
     {
         DrawPolygon();
     }
 }
コード例 #6
0
 protected void SetValues(int splineOrder, IEnumerable <CgmPoint> points, IEnumerable <double> knots, double start, double end)
 {
     SplineOrder = splineOrder;
     Points.AddRange(points);
     Knots.AddRange(knots);
     StartValue = start;
     EndValue   = end;
 }
コード例 #7
0
ファイル: MarkGeometryPath.cs プロジェクト: AdilGM/2DCAD
        public MarkGeometryPath(IEnumerable <MarkGeometryPoint> points)
            : base()
        {
            Points.AddRange(points);

            // TODO : Calculate centroid
            CentrePoint = new MarkGeometryPoint();
            Update();
        }
コード例 #8
0
ファイル: RegionMarker.cs プロジェクト: JRetza/cog
 public RegionMarker(GeographicalRegionViewModel region)
     : base(Enumerable.Empty <PointLatLng>())
 {
     Region = region;
     Points.AddRange(region.Coordinates.Select(coord => new PointLatLng(coord.Item1, coord.Item2)));
     Position         = Points[0];
     _regionPoints    = new List <RegionPointMarker>();
     _regionMidpoints = new List <RegionPointMarker>();
 }
コード例 #9
0
ファイル: wBezierSpline.cs プロジェクト: pm-Architect/Aviary
 public wBezierSpline(wPoint A, wPoint B, wPoint C, wPoint D)
 {
     Spans.Add(new wBezierSpans(0, 1, 2, 3));
     Points.AddRange(new List <wPoint>()
     {
         A, B, C, D
     });
     Segments.Add(new wCubicBezier(A, B, C, D));
 }
コード例 #10
0
ファイル: EMACurve.cs プロジェクト: sbalia/MD_Diploma
 public void RecalculateValues(List <SimpleDateValue> currentCurrencyValues)
 {
     if (Display)
     {
         var emaPoints = EMA.CalculateEMA(currentCurrencyValues, Period);
         Points.Clear();
         Points.AddRange(emaPoints);
     }
 }
コード例 #11
0
ファイル: MarkGeometryPath.cs プロジェクト: AdilGM/2DCAD
        public MarkGeometryPath(params MarkGeometryPoint[] points)
            : base()
        {
            Points.AddRange(points);

            // TODO : Calculate centroid
            CentrePoint = new MarkGeometryPoint();
            Update();
        }
コード例 #12
0
ファイル: MarkGeometryPath.cs プロジェクト: AdilGM/2DCAD
        public MarkGeometryPath(MarkGeometryCircle circle)
            : base()
        {
            Points.AddRange((MarkGeometryPoint[])circle);
            CentrePoint = circle.CentrePoint;
            Fill        = circle.Fill;
            Stroke      = circle.Stroke;

            Update();
        }
コード例 #13
0
        public Line(Color c, bool auto = true) : base(c)
        {
            Point first = new Point(0, FormMain.BlockSize);
            Point last  = new Point(FormMain.BlockSize, 0);

            if (auto)
            {
                Points.AddRange(new Point[] { first, last });
            }
        }
コード例 #14
0
ファイル: MarkGeometryPath.cs プロジェクト: AdilGM/2DCAD
        public MarkGeometryPath(MarkGeometryArc arc)
            : base()
        {
            Points.AddRange((MarkGeometryPoint[])arc);
            CentrePoint = arc.CentrePoint;
            Fill        = arc.Fill;
            Stroke      = arc.Stroke;

            Update();
        }
コード例 #15
0
ファイル: MarkGeometryPath.cs プロジェクト: AdilGM/2DCAD
        public MarkGeometryPath(MarkGeometryCircle circle, double minimumFacetLength)
            : base()
        {
            int nSegments = (int)Math.Floor(GeometricArithmeticModule.CalculatePerimeter(circle) / minimumFacetLength);

            Points.AddRange(GeometricArithmeticModule.Explode(circle, nSegments + 1));
            CentrePoint = circle.CentrePoint;

            Update();
        }
コード例 #16
0
 public KeyFrame(uint id, double fx, double fy, double cx, double cy, int points, Frame frame)
 {
     Id    = id;
     Fx    = fx;
     Fy    = fy;
     Cx    = cx;
     Cy    = cy;
     Frame = frame;
     Points.AddRange(Enumerable.Range(1, points).Select(c => (Point)null));
 }
コード例 #17
0
 public RightTriangle(Color c, bool auto = false) : base(c)
 {
     if (auto)
     {
         Point top   = new Point(0, 0);
         Point left  = new Point(0, FormMain.BlockSize);
         Point right = new Point(FormMain.BlockSize, FormMain.BlockSize);
         Points.AddRange(new Point[] { top, left, right });
     }
 }
コード例 #18
0
ファイル: AsciiPoints.cs プロジェクト: 0000duck/OpenCAD-1
 public AsciiPoints(string path)
 {
     try
     {
         Points.AddRange(File.ReadLines(path).Select(line => new Point(new Vect3(line.Split(' ').Select(Double.Parse).ToList()))).ToList());
     }
     catch (Exception)
     {
         throw;
     }
 }
コード例 #19
0
 public Tetrahedron(Color c, bool auto = false) : base(c)
 {
     if (auto)
     {
         Point top    = new Point(FormMain.BlockSize / 2, 0);
         Point left   = new Point(0, FormMain.BlockSize);
         Point bottom = new Point(FormMain.BlockSize, FormMain.BlockSize);
         Point right  = new Point(FormMain.BlockSize, FormMain.BlockSize / 2);
         Points.AddRange(new Point[] { top, left, bottom, right });
     }
 }
コード例 #20
0
 public wLine(wPoint StartPoint, wVector Direction, double Length)
 {
     Points.AddRange(new List <wPoint>()
     {
         Start, End
     });
     Indices.AddRange(new List <int>()
     {
         0, 1
     });
 }
コード例 #21
0
ファイル: wCatmullRom.cs プロジェクト: pm-Architect/Aviary
 public wCatmullRom()
 {
     Points.AddRange(new List <wPoint>()
     {
         StartPoint, StartControlPoint, EndControlPoint, EndPoint
     });
     Indices.AddRange(new List <int>()
     {
         0, 1, 2, 3
     });
 }
コード例 #22
0
 public wQuadraticBezier()
 {
     Points.AddRange(new List <wPoint>()
     {
         StartPoint, StartControlPoint, EndControlPoint, EndPoint
     });
     Indices.AddRange(new List <int>()
     {
         0, 1, 2, 3
     });
 }
コード例 #23
0
 public wLine()
 {
     Points.AddRange(new List <wPoint>()
     {
         Start, End
     });
     Indices.AddRange(new List <int>()
     {
         0, 1
     });
 }
コード例 #24
0
        public void DrawPoints()
        {
            int              count  = _BlockingCollection.Count;
            bool             clear  = false;
            List <DataPoint> points = new List <DataPoint>();

            for (int i = 0; i < count; i++)
            {
                DataPoint point = _BlockingCollection.Take();
                if (point.Y > _MaxY)
                {
                    _MaxY = point.Y;
                }
                else if (point.Y < _MinY)
                {
                    _MinY = point.Y;
                }

                points.Add(point);
                if (point.X == 0)
                {
                    clear = true;
                    points.Clear();
                    _MinY = 0;
                    _MaxY = 0;
                }
            }

            if (clear || points.Count > 0)
            {
                Parent.Parent.SyncContext.Post(o =>
                {
                    if (clear)
                    {
                        Points.Clear();
                    }
                    Points.AddRange(points);
                    if (Points.Count > 0)
                    {
                        double max = Math.Max(Math.Abs(_MinY), Math.Abs(_MaxY)) * 1.05;
                        int pow    = (int)Math.Ceiling(Math.Log(max) / Math.Log(2));

                        double newMaxY = Math.Max(Math.Pow(2, pow), 0.25);
                        if (MaximumY != newMaxY)
                        {
                            MaximumY   = newMaxY;
                            MinimumY   = -newMaxY;
                            MajorStepY = newMaxY / 2;
                            MinorStepY = newMaxY / (2 * 5);
                        }
                    }
                }, null);
            }
        }
コード例 #25
0
        public Polyline(Point origin, Point offset)
        {
            var rect   = new Rectangle(origin, new Size(offset.X, offset.Y));
            var points = new List <PointF>
            {
                new PointF(rect.Left, rect.Top),
                new PointF(rect.Left + rect.Width, rect.Top + rect.Height)
            };

            Points.AddRange(points);
        }
コード例 #26
0
ファイル: wBezierSpline.cs プロジェクト: pm-Architect/Aviary
        public void AddSpan(wPoint A, wPoint B, wPoint C, wPoint D)
        {
            int i = Points.Count - 1;

            Points.AddRange(new List <wPoint>()
            {
                B, C, D
            });
            Spans.Add(new wBezierSpans(i, i + 1, i + 2, i + 3));
            Segments.Add(new wCubicBezier(A, B, C, D));
        }
コード例 #27
0
 public Rectangle(Color c, bool auto = false) : base(c)
 {
     if (auto)
     {
         Point lt = new Point(0, 0);
         Point rt = new Point(W, 0);
         Point lb = new Point(0, H);
         Point rb = new Point(W, H);
         Points.AddRange(new Point[] { lt, rt, rb, lb });
         pen.DashStyle = DashStyle.Dash;
     }
 }
コード例 #28
0
 public EquilateralTriangle(Color c, bool auto = false) : base(c)
 {
     if (auto)
     {
         Point top = new Point(FormMain.BlockSize / 2, 0);
         //h*ctg(60*) половина стороны треугольника
         int   deltaX = (int)Math.Round(FormMain.BlockSize / Math.Sqrt(3));
         Point left   = new Point(FormMain.BlockSize / 2 - deltaX, FormMain.BlockSize);
         Point right  = new Point(FormMain.BlockSize / 2 + deltaX, FormMain.BlockSize);
         Points.AddRange(new Point[] { top, left, right });
     }
 }
コード例 #29
0
ファイル: MarkGeometryPath.cs プロジェクト: AdilGM/2DCAD
        public MarkGeometryPath(MarkGeometryArc arc, double minimumFacetLength)
            : base()
        {
            int nSegments = (int)Math.Floor(GeometricArithmeticModule.CalculatePerimeter(arc) / minimumFacetLength);

            Points.AddRange((MarkGeometryPoint[])arc);
            CentrePoint = arc.CentrePoint;
            Fill        = arc.Fill;
            Stroke      = arc.Stroke;

            Update();
        }
コード例 #30
0
        public wLine(wPoint StartPoint, wPoint EndPoint)
        {
            Start = StartPoint;
            End   = EndPoint;
            Points.AddRange(new List <wPoint>()
            {
                Start, End
            });
            Indices.AddRange(new List <int>()
            {
                0, 1
            });

            Direction = new wVector(Start, End);
        }
コード例 #31
0
ファイル: PathBruteForcer.cs プロジェクト: znsoft/AiCup
        public Moves Do(ACar car, Points pts)
        {
            // Проверка что данный путь был выбран
            if (_selectThisTick + 1 != MyStrategy.world.Tick)
                _lastSuccessStack = null;

            Self = car.Clone();

            if (_lastCall == LastSuccess)
                LastSuccess = _lastCall;

            for (var t = 0; t < MyStrategy.world.Tick - _lastCall && _lastSuccessStack != null && _lastSuccessStack.Count > 0; t++)
            {
                _lastSuccessStack[0].Times--;
                _lastSuccessStack.Normalize();
            }
            if (_lastSuccessStack != null && (_lastSuccessStack.Count == 0 || _useDist2 && _lastSuccessStack.ComputeTime() < 30))
                _lastSuccessStack = null;

            _lastCall = MyStrategy.world.Tick;

            /*
             * Количество бонусов на расстоянии 0.5t
             * Если изменилось - пересчитывать сильно
             */
            var bonusesCount05 = MyStrategy.Bonuses
                .Count(bonus => Self.GetDistanceTo(bonus) < Const.TileSize / 2);

            /*
             * Количество бонусов на расстоянии 2t
             * Если изменилось - чуть нужно пересчитать
             */
            var bonusesCount2 = MyStrategy.Bonuses
                .Count(
                    bonus =>
                        Self.GetDistanceTo(bonus) < Const.TileSize*2 &&
                        MyStrategy.CellDistance(Self, bonus) <= 2);

            // Если был success на прошлом тике, то продолжаем. Или каждые _interval тиков.
            if (Const.Game.InitialFreezeDurationTicks < MyStrategy.world.Tick &&
                bonusesCount05 == _bonusesCount05 &&
                LastSuccess < MyStrategy.world.Tick - 1 &&
                (MyStrategy.world.Tick - (LastSuccess + 1))%_interval != 0)
            {
                _validateLastSuccessStack();
                return _lastSuccessStack;
            }

            /*
             * Смотрим на шины, которые на расстоянии не более 6 тайлов
             */
            var prevProj = _projCandidates;
            _projCandidates = MyStrategy.Tires
                .Where(
                    proj =>
                        Self.GetDistanceTo(proj[0]) <= Const.TileSize * 6 &&
                        MyStrategy.CellDistance(Self, proj[0]) <= 6)
                .ToArray();

            var extended = MyStrategy.ExtendWaySegments(pts, 50);
            _bruteWayPoints = extended.GetRange(0, Math.Min(_waypointsCount, extended.Count)).ToArray();
            if (LastStageMove.IsUseNitro && _turnsCount(_bruteWayPoints) > 1)
                return null;
            #if DEBUG
            var bruteWayPoints = new Points();
            bruteWayPoints.AddRange(_bruteWayPoints);
            Visualizer.SegmentsDrawQueue.Add(new object[]{ Brushes.Brown, bruteWayPoints, 0.0 });
            #endif
            _needDist = Const.TileSize*0.5 - 3;
            _needDist2 = Const.TileSize - 3;
            _turnTo = _bruteWayPoints[_bruteWayPoints.Length - 1];
            _turnTo2 = _bruteWayPoints[Math.Min(_bruteWayPoints.Length - 1, (int)(_bruteWayPoints.Length * 0.83))];
            #if DEBUG
            Visualizer.CircleFillQueue.Add(new Tuple<Brush, ACircularUnit>(Brushes.OrangeRed, new ACircularUnit { X = _turnTo.X, Y = _turnTo.Y, Radius = 20}));
            Visualizer.CircleFillQueue.Add(new Tuple<Brush, ACircularUnit>(Brushes.Orange, new ACircularUnit { X = _turnTo2.X, Y = _turnTo2.Y, Radius = 20 }));
            #endif

            _patterns = Patterns.Select(pt => new PathPattern
            {
                From = pt.From,
                To = pt.To,
                Step = pt.Step,
                Move = pt.Move.Clone()
            }).ToArray();
            foreach (var p in _patterns)
            {
                if (p.Move.WheelTurn is TurnPattern)
                {
                    var turnPattern = p.Move.WheelTurn as TurnPattern;
                    if (turnPattern.Pattern == TurnPatternType.ToNext)
                        p.Move.WheelTurn = Self.GetAngleTo(_turnTo) < 0 ? -1 : 1;
                    else if (turnPattern.Pattern == TurnPatternType.FromNext)
                        p.Move.WheelTurn = Self.GetAngleTo(_turnTo) < 0 ? 1 : -1;
                }
            }

            _movesStack = new Moves();
            _bestMovesStack = new Moves();
            _bestTime = MyStrategy.Infinity;
            _bestImportance = 0;

            /*
             * Смотрим на бонусы, которые на расстоянии не более 4t
             * TODO: уменьшить приоритет бонусов, которые может быть возьмет другой (в.т.ч тиммейт)
             */
            _bonusCandidates = MyStrategy.Bonuses
                .Where(
                    bonus =>
                        MyStrategy.world.Tick > 270 && // Не смотреть на бонусы при старте!!!
                        Self.GetDistanceTo(bonus) <= Const.TileSize * 4 &&
                        MyStrategy.CellDistance(Self, bonus) <= 4
                )
                .ToArray();

            /*
             * Смотрим на лужи, которые на расстоянии не более 5 тайлов
             */
            var prevSlicks = _slickCandidates;
            _slickCandidates = MyStrategy.OilSlicks
                .Where(
                    slick =>
                        Self.GetDistanceTo(slick) <= Const.TileSize*5 &&
                        MyStrategy.CellDistance(Self, slick) <= 5
                )
                .ToArray();

            /*
             * Пытаться объехать тех, которые
             * - Крашнулись
             * - Убиты
             * - Двигатель меньше чем на 0.5 мощности
             * - Двигаются по встречной
             *
             * - Если у меня нитро, или будет нитро
             *
             * - Своих
             */
            var prevCars = _carCandidates;
            _carCandidates = MyStrategy.Others
                .Where(opp => opp[0].GetDistanceTo(Self) < Const.TileSize*9)
                .Where(
                    opp =>
                        opp[0].Original.IsTeammate ||
                        MyStrategy.IsCrashed(opp[0].Original) ||
                        !DurabilityObserver.IsActive(opp[0].Original) ||
                        opp[0].EnginePower < 0.5 ||
                        Self.RemainingNitroTicks > 0 ||
                        Math.Abs(Geom.GetAngleBetween(Self.Speed, opp[0].Speed)) > Math.PI / 2
                )
                .Where(opp => MyStrategy.CellDistance(Self, opp[0]) <= 9) // 9 - потому что он может ехать по встречке
                .ToArray();

            if (_cache != null)
            {
                for (var k = 0; k < _patterns.Length; k++)
                {
                    var range = (prevSlicks == null || prevCars == null || prevProj == null
                        || _bonusesCount2 != bonusesCount2
                        || prevSlicks.Length != _slickCandidates.Length
                        || prevCars.Length != _carCandidates.Length
                        || prevProj.Length != _projCandidates.Length)
                        ? (k == 0 ? 6 : 4)
                        : (k == 0 ? 6 : 2);

                    if (_bonusesCount05 != bonusesCount05 || Special && k == 0)
                        range = 10;

                    _patterns[k].From = Math.Max(0, _cache[k].Times - range);
                    _patterns[k].To = Math.Min(_patterns[k].To * 9 / 7, _cache[k].Times + range);
                    _patterns[k].Step = 2;
                }
            }

            _bonusesCount05 = bonusesCount05;
            _bonusesCount2 = bonusesCount2;

            var wayPointRequired = false;
            for(var i = _bruteWayPoints.Length - 1; i >= 0; i--)
            {
                if (_bruteWayPoints[i].GetDistanceTo2(_turnTo) < _needDist*_needDist)
                {
                    for (var j = 0; j < i; j++)
                        wayPointRequired |=
                            MyStrategy.GetNextWayPoint(Self.Original).Equals(MyStrategy.GetCell(_bruteWayPoints[j]));
                    break;
                }
            }

            _doRecursive(Self, 0, new PassedInfo { WayPoint = !wayPointRequired });
            _cache = null;
            if (_bestTime == MyStrategy.Infinity)
                return _lastSuccessStack;

            if (_bestMovesStack.ComputeTime() != _bestTime)
                throw new Exception("ComputeTime != BestTime");

            LastSuccess = MyStrategy.world.Tick;
            _cache = _bestMovesStack.Clone();

            if (_maxTicksInfo == null)
                _maxTicksInfo = new int[_bestMovesStack.Count];
            for (var i = 0; i < _maxTicksInfo.Length; i++)
                _maxTicksInfo[i] = Math.Max(_maxTicksInfo[i], _bestMovesStack[i].Times);

            _bestMovesStack.Normalize();
            _lastSuccessStack = _bestMovesStack.Clone();
            return _bestMovesStack;
        }
コード例 #32
0
ファイル: Visualizer.cs プロジェクト: znsoft/AiCup
        public static void DrawWay(Car self, Moves stack, Brush brush, double width)
        {
            if (stack == null)
                return;

            var pts = new Points();
            pts.AddRange(MyStrategy.GetCarPath(self, stack).Select(car => new Point(car)));

            SegmentsDrawQueue.Add(new object[]
            {
                brush,
                pts,
                width
            });
        }