コード例 #1
0
 private void Swap(PlotPoint plotPoint1, PlotPoint plotPoint2)
 {
     Point tempPoint = new Point(plotPoint1.X, plotPoint1.Y);
     plotPoint1.X = plotPoint2.X;
     plotPoint1.Y = plotPoint2.Y;
     plotPoint2.X = tempPoint.X;
     plotPoint2.Y = tempPoint.Y;
 }
コード例 #2
0
 private void MovePointToRandom(PlotPoint point, double aspectRatio)
 {
     int minX = (int)Math.Max(0, point.X - Radius);
     int maxX = (int)Math.Min((int)(PlotPointUtil.ModelHeight * aspectRatio), point.X + Radius);
     int minY = (int)Math.Max(0, point.Y - Radius);
     int maxY = (int)Math.Min(PlotPointUtil.ModelHeight, point.Y + Radius);
     point.X = AppUtil.Random.Next(minX, maxX);
     point.Y = AppUtil.Random.Next(minY, maxY);
 }
コード例 #3
0
ファイル: PlotGraph.cs プロジェクト: blatherwock/color_sorter
 private void CreatePlotPoints(int plotPointCount, int pointRadius, double pointOpacity, bool border)
 {
     this.PlotPoints = new PlotPoint[plotPointCount];
     for (int i = 0; i < PlotPoints.Length; i++)
     {
         PlotPoint newPoint = new PlotPoint(pointRadius, pointOpacity, border: border);
         PlotPoints[i] = newPoint;
     }
 }
コード例 #4
0
 public PlotPointViewRenderer(Plotter plotter, PlotPoint point)
 {
     this.Point = point;
     this.getPlotHeight = plotter.getPlotHeight;
     this.getPlotWidth = plotter.getPlotWidth;
     point.PropertyChanged += new PropertyChangedEventHandler(point_PropertyChanged);
     this.SetValue(PlotPointViewRenderer.XProperty, this.TransformedPointX);
     this.SetValue(PlotPointViewRenderer.YProperty, this.TransformedPointY);
     this.AddToStoryBoard();
 }
コード例 #5
0
        public static int CalculateDelta(this PlotPoint point, PlotPoint[] points, double aspectRatio)
        {
            int newDelta = 0;
            for (int i = 0; i < points.Length; i++)
            {
                if (!point.Equals(points[i]))
                {
                    int realDistance = ModelDistanceBetween(point, points[i]);
                    int twoDDistance = TwoDimensionalDistanceBetween(point, points[i]);

                    int modelGuess = (twoDDistance * GetDataHypotenuse()) / GetModelHypotenuse(aspectRatio);
                    newDelta += (int)Math.Abs(realDistance - modelGuess);
                }
            }
            return newDelta;
        }
コード例 #6
0
 public void Sort(PlotPoint[] plotPoints, double aspectRatio)
 {
     foreach (PlotPoint point in plotPoints)
     {
         int delta = point.CalculateDelta(plotPoints, aspectRatio);
         Point oldCoord = new Point(point.X, point.Y);
         MovePointToRandom(point, aspectRatio);
         if (point.CalculateDelta(plotPoints, aspectRatio) > delta)
         {
             point.X = oldCoord.X;
             point.Y = oldCoord.Y;
         }
         else
         {
             point.MovePoint();
         }
     }
 }
コード例 #7
0
 public void Sort(PlotPoint[] plotPoints, double aspectRatio)
 {
     for (int i = 0; i < plotPoints.Length; i++)
     {
         int j = AppUtil.Random.Next(0, plotPoints.Length);
         if (i != j)
         {
             int delta = plotPoints[i].CalculateDelta(plotPoints, aspectRatio) +
                 plotPoints[j].CalculateDelta(plotPoints, aspectRatio);
             Swap(plotPoints[i], plotPoints[j]);
             int newDelta = plotPoints[i].CalculateDelta(plotPoints, aspectRatio) +
                 plotPoints[j].CalculateDelta(plotPoints, aspectRatio);
             if (newDelta >= delta)
             {
                 Swap(plotPoints[i], plotPoints[j]);
             }
             else
             {
                 plotPoints[i].MovePoint();
                 plotPoints[j].MovePoint();
             }
         }
     }
 }
コード例 #8
0
 public static int ModelDistanceBetween(PlotPoint point1, PlotPoint point2)
 {
     int distance = 0;
     short[] p1coord, p2coord;
     p1coord = point1.DataCoordinates;
     p2coord = point2.DataCoordinates;
     for (int i = 0; i < point1.DataCoordinates.Length; i++)
     {
         distance += (int)Math.Pow(p1coord[i] - p2coord[i], 2);
     }
     distance = (int)Math.Sqrt(distance);
     return distance;
 }
コード例 #9
0
 public static int TwoDimensionalDistanceBetween(PlotPoint point1, PlotPoint point2)
 {
     return (int)Math.Sqrt(Math.Pow(point1.X - point2.X, 2) +
         Math.Pow(point1.Y - point2.Y, 2));
 }
コード例 #10
0
 private void MovePointToRandom(PlotPoint point, double aspectRatio)
 {
     point.Y = AppUtil.Random.Next(0, PlotPointUtil.ModelHeight);
     point.X = AppUtil.Random.Next(0, (int)(PlotPointUtil.ModelHeight * aspectRatio));
 }