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; }
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); }
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; } }
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(); }
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; }
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(); } } }
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(); } } } }
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; }
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)); }
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)); }