Esempio n. 1
0
        private void MainCanvas_MouseMove(object sender, MouseEventArgs e)
        {
            if (draggedElement == null)
            {
                return;
            }

            var position = e.GetPosition(mainCanvas);

            if (Primitives.Point.Distance(position.X, position.Y, Canvas.GetLeft(draggedElement), Canvas.GetTop(draggedElement)) > 30)
            {
                draggedElement = null;
                return;
            }

            position = new System.Windows.Point(position.X - mainCanvas.ActualWidth / 2, position.Y - mainCanvas.ActualHeight / 2);
            if (!renderer.AngleDictionary.ContainsKey(draggedElement))
            {
                return;
            }
            var angle  = renderer.AngleDictionary[draggedElement];
            var sample = renderer.SampleDictionary[draggedElement];

            var maxLength = mainCanvas.ActualWidth / 2;
            var newLength = Math.Sqrt(Math.Pow(position.X, 2) + Math.Pow(position.Y, 2));
            var delta     = new PolarPoint(angle, newLength).ToCartesian();

            sample.Value = ((MaxValue * newLength) / renderer.CalculatedMaxLineLength) / sample.Scale;
            SampleValueChangedCommand?.Execute(sample);

            Canvas.SetLeft(draggedElement, (mainCanvas.ActualWidth / 2 - (SamplePointDiameter / 2)) + delta.X);
            Canvas.SetTop(draggedElement, (mainCanvas.ActualHeight / 2 - (SamplePointDiameter / 2)) + delta.Y);
        }
Esempio n. 2
0
        public void CartesianCoordinateIsConvertedToPolar()
        {
            var testPoint = new PolarPoint(new Point(new Tube(2, 1, "Unknown")));

            Assert.IsTrue(Math.Round(testPoint.R, 3) == 2.236);
            Assert.IsTrue(Math.Round(testPoint.Degree, 3) == 26.565);
        }
Esempio n. 3
0
        //private void renderCategoryLabels()
        //{
        //	if (FocusedSegment == null)
        //	{
        //		return;
        //	}
        //	var context = new ProviderContext(Data.Count);
        //	MaterialProvider.Reset(context);
        //	_categoryLabels.Children.Clear();
        //	var diameter = _segments.RenderSize.Smallest() * CircleScale;

        //	var outerLabelRadius = (diameter / 2) * OuterLabelPositionScale;
        //	var overlayedLabelRadius = (diameter / 2) * .7;

        //	var targetAngularOffset = FocusedSegment.RequireType<ArcPath>().CalculateAngularOffset();

        //	foreach (var d in Data)
        //	{
        //		var materialSet = MaterialProvider.ProvideNext(context);
        //		var categoryNameLabel = positionLabel(d, outerLabelRadius, targetAngularOffset, true);

        //		categoryNameLabel.Content = d.CategoryName;
        //		categoryNameLabel.BindTextualPrimitive<BarTotalPrimitive>(this);
        //		categoryNameLabel.Foreground = BarTotalForeground.GetMaterial(materialSet);
        //		_categoryLabels.Children.Add(categoryNameLabel);


        //		var valueLabel = positionLabel(d, overlayedLabelRadius, targetAngularOffset);

        //		valueLabel.Content = d.Value;
        //		valueLabel.BindTextualPrimitive<ValuePrimitive>(this);
        //		valueLabel.Foreground = ValueForeground.GetMaterial(materialSet);
        //		_categoryLabels.Children.Add(valueLabel);
        //	}
        //}

        private Label positionLabel(CategoricalDouble d, double radius, double targetAngularOffset,
                                    bool horizontalPositionSkew = false)
        {
            var categoryLabel = new Label
            {
                HorizontalAlignment = HorizontalAlignment.Center,
                VerticalAlignment   = VerticalAlignment.Center,
                IsHitTestVisible    = false
            };

            var pretransformedOffset     = d.RenderedVisual.RequireType <ArcPath>().PolarOffset;
            var arcAngle                 = d.RenderedVisual.RequireType <ArcPath>().ArcAngle;
            var pretransformedLabelAngle = pretransformedOffset + (arcAngle / 2);
            var actualLabelAngle         = pretransformedLabelAngle - targetAngularOffset;

            var horizontalLabelSkew = horizontalPositionSkew
                                ? Math.Cos(CoordinateHelpers.ToRadian(actualLabelAngle)) * HorizontalLabelPositionSkew
                                : 0;

            var labelRadius     = radius;
            var polarPoint      = new PolarPoint(actualLabelAngle, labelRadius);
            var labelCoordinate = polarPoint.ToCartesian();

            categoryLabel.Margin = new Thickness(labelCoordinate.X + horizontalLabelSkew, -labelCoordinate.Y,
                                                 -labelCoordinate.X - horizontalLabelSkew, labelCoordinate.Y);
            return(categoryLabel);
        }
Esempio n. 4
0
        private SKPoint FromPolar(PolarPoint point)
        {
            float x = (float)(point.Radius * Math.Cos(point.Angle));
            float y = (float)(point.Radius * Math.Sin(point.Angle));

            return(new SKPoint(x, y));
        }
Esempio n. 5
0
        public static Point2D ToPoint2D(this PolarPoint polarPoint)
        {
            var x = polarPoint.DistanceFromCenter * Math.Cos(polarPoint.Angle);
            var y = polarPoint.DistanceFromCenter * Math.Sin(polarPoint.Angle);

            return(new Point2D(x, y));
        }
Esempio n. 6
0
        public void CalcMeasure()
        {
            if (measureRange.FromLocation != null && measureRange.ToLocation != null)
            {
                double lat1 = measureRange.FromLocation.Latitude;
                double lon1 = measureRange.FromLocation.Longitude;
                double lat2 = measureRange.ToLocation.Latitude;
                double lon2 = measureRange.ToLocation.Longitude;

                measureResult.DST = CalcDistance(lat1, lon1, lat2, lon2) / 1852;
                double brg = CalcBearing(lat1, lon1, lat2, lon2);
                measureResult.BRG = (brg + 360) % 360;
                if (TWS.IsValid())
                {
                    measureResult.TWA = TWD.Average(Inst.BufHalfMin) - brg;
                }

                double     vmc = 0;
                PolarPoint p   = new PolarPoint();

                if (SOG.IsValid())
                {
                    vmc = SOG.Average(Inst.BufHalfMin);
                }

                if (TWD.IsValid() && SPD.IsValid() && NavPolar.IsLoaded)
                {
                    double Angle = Math.Abs(measureResult.TWA % 360);
                    if (Angle > 180)
                    {
                        Angle = 360 - Angle;
                    }
                    if (Angle < 50)
                    {
                        p   = NavPolar.GetBeatTarget(TWS.Average(Inst.BufHalfMin));
                        vmc = p.SPD * Math.Cos(p.TWA * Math.PI / 180);
                    }
                    else
                    if (Angle > 140)
                    {
                        p   = NavPolar.GetRunTarget(TWS.Average(Inst.BufHalfMin));
                        vmc = -p.SPD * Math.Cos(p.TWA * Math.PI / 180);
                    }
                    else
                    {
                        vmc = NavPolar.GetTarget(Angle, TWS.Average(Inst.BufHalfMin));
                    }
                }

                if (vmc != 0)
                {
                    measureResult.TTG = TimeSpan.FromHours(measureResult.DST / vmc);
                }
                else
                {
                    measureResult.TTG = TimeSpan.FromHours(0);
                }
            }
        }
Esempio n. 7
0
        public void PolarCoordinateIsConvertedTo()
        {
            var testPoint       = new PolarPoint(new Point(new Tube(2, 1, "Unknown")));
            var cartessianPoint = Point.FromPolarPoint(testPoint);

            Assert.IsTrue(cartessianPoint.X == 1);
            Assert.IsTrue(cartessianPoint.Y == 2);
        }
Esempio n. 8
0
        public void PolarPointToPoint()
        {
            var polar  = new PolarPoint(100D, Math.PI / 4);
            var decart = polar.Point;

            Aver.AreEqual(70D, Math.Floor((double)decart.X));
            Aver.AreEqual(70D, Math.Floor((double)decart.Y));
        }
Esempio n. 9
0
        public void PolarPointIsEqual()
        {
            var polar1 = new PolarPoint(100D, 1.2D);
            var polar2 = new PolarPoint(10D, 2.17D);
            var polar3 = new PolarPoint(100D, 1.2D);

            Aver.AreObjectsNotEqual(polar1, polar2);
            Aver.AreObjectsEqual(polar1, polar3);
        }
Esempio n. 10
0
        public void PolarPointTheta()
        {
            var polar = new PolarPoint(100D, Math.PI);

            Aver.AreEqual(314D, Math.Floor(polar.Theta * 100D));

            polar.Theta = 1.18D;
            Aver.AreEqual(118D, Math.Floor(polar.Theta * 100D));
        }
Esempio n. 11
0
        public void PolarPointIsEqual()
        {
            var polar1 = new PolarPoint(100D, 1.2D);
            var polar2 = new PolarPoint(10D, 2.17D);
            var polar3 = new PolarPoint(100D, 1.2D);

            Assert.AreNotEqual(polar1, polar2);
            Assert.AreEqual(polar1, polar3);
        }
Esempio n. 12
0
        public void PolarPointRadius()
        {
            var polar = new PolarPoint(100D, Math.PI);

            Aver.AreEqual(100D, polar.R);

            polar.R = 125D;
            Aver.AreEqual(125D, polar.R);
        }
Esempio n. 13
0
        public void PointToPolarPoint()
        {
            var center = new Point(0, 0);
            var pnt    = new Point(150, 0);

            var polar = new PolarPoint(center, pnt);

            Aver.AreEqual(150D, polar.R);
            Aver.AreEqual(0D, polar.Theta);
        }
Esempio n. 14
0
        public EdgeShape Construct(Template template, int reference, int neighbor)
        {
            PolarPoint polar = Angle.ToPolar(Calc.Difference(template.Minutiae[neighbor].Position, template.Minutiae[reference].Position));
            EdgeShape  edge;

            edge.Length         = (short)polar.Distance;
            edge.ReferenceAngle = Angle.Difference(template.Minutiae[reference].Direction, polar.Angle);
            edge.NeighborAngle  = Angle.Difference(template.Minutiae[neighbor].Direction, Angle.Opposite(polar.Angle));
            return(edge);
        }
Esempio n. 15
0
 public static void CalcLongNav(DateTime now)
 {
     if (TWA.IsValid() && BRG.IsValid() && DRIFT.IsValid() && NavPolar.IsLoaded)
     {
         PolarPoint p = NavPolar.GetTargetVMC(TWS.Val, TWD.Val, BRG.Val, DRIFT.Val, SET.Val);
         TGTVMC.Val = p.SPD;
         TGTVMC.SetValid(now);
         TGTCTS.Val = TWD.Val + p.TWA;
         TGTCTS.SetValid(now);
     }
 }
Esempio n. 16
0
 public static void CalcLongNav(DateTime now)
 {
     if (TWA.IsValid() && BRG.IsValid() && DRIFT.IsValid() && NavPolar.IsLoaded)
     {
         PolarPoint p = NavPolar.GetTargetVMC(TWS.Average(Inst.BufTwoMin), TWD.Average(Inst.BufTwoMin), BRG.Val, DRIFT.Average(Inst.BufTwoMin), SET.Average(Inst.BufTwoMin));
         TGTVMC.Val = p.SPD;
         TGTVMC.SetValid(now);
         TGTCTS.Val = TWD.Average(Inst.BufTwoMin) + p.TWA;
         TGTCTS.SetValid(now);
     }
 }
Esempio n. 17
0
        public void ToCartesianToPolar_ExpectedParameter_OriginalValue()
        {
            //----------- Arrange -----------------------------
            var origin = new PolarPoint(1, 1);

            //----------- Act ---------------------------------
            var result = origin.ToCartesian().ToPolar();

            //----------- Assert-------------------------------
            Assert.True(origin.R.Is(result.R, 1e-12) && origin.Θ.Is(result.Θ, 1e-12));
        }
Esempio n. 18
0
        public void ToCartesian_LargeAngle_ExpectedBehavior()
        {
            //----------- Arrange -----------------------------
            var right = new PolarPoint(1, 1000 * MathExt.TwoPi);

            //----------- Act ---------------------------------
            var ihat = right.ToCartesian();

            //----------- Assert-------------------------------
            Assert.True(ihat.X.Is(1, 1e-12) && ihat.Y.Is(0, 1e-12));
        }
Esempio n. 19
0
 public void PolarPointInvalid()
 {
     try
     {
         var pp = new PolarPoint(100, 789);
         Aver.Fail("Object was created");
     }
     catch (AzosException ex)
     {
         Aver.IsTrue(ex.Message.Contains("angle"));
     }
 }
Esempio n. 20
0
 public void PolarPointInvalid()
 {
     try
     {
         var pp = new PolarPoint(100, 789);
         Assert.Fail();
     }
     catch (NFXException ex)
     {
         Assert.IsTrue(ex.Message.Contains("angle"));
     }
 }
Esempio n. 21
0
        public void PolarPointEquality_NotEqual_NotEqual()
        {
            //----------- Arrange -----------------------------
            var data  = new PolarPoint(1, 0);
            var data2 = new PolarPoint(0.5, Math.PI);
            //----------- Act ---------------------------------
            bool result  = data == data2;
            bool inverse = data != data2;

            //----------- Assert-------------------------------
            Assert.False(result);
            Assert.True(inverse);
        }
Esempio n. 22
0
        private static PathGeometry SelectedGeometry(Size renderSpace)
        {
            var leftBaseAnchor  = new Point(0, 0);
            var rightBaseAnchor = leftBaseAnchor.PushHorizontal(renderSpace.Width);

            var slopeVerticalPosition = renderSpace.Height / 2;

            var rightTopAnchor = rightBaseAnchor.PushVertical(slopeVerticalPosition);
            var leftTopAnchor  = leftBaseAnchor.PushVertical(slopeVerticalPosition);

            var leftTopAnchorControlVector  = new PolarPoint(45, 30);
            var rightTopAnchorControlVector = new PolarPoint(135, 30);

            var leftTopAnchorControlPoint  = leftTopAnchor.Add(leftTopAnchorControlVector.ToCartesian());
            var rightTopAnchorControlPoint = rightTopAnchor.Add(rightTopAnchorControlVector.ToCartesian());

            var topCenterAnchor = new Point(renderSpace.Width / 2, renderSpace.Height);

            return(new PathGeometry
            {
                Figures = new PathFigureCollection
                {
                    new PathFigure
                    {
                        StartPoint = leftBaseAnchor.LocalizeInCartesianSpace(renderSpace),
                        Segments = new PathSegmentCollection
                        {
                            new LineSegment {
                                Point = rightBaseAnchor.LocalizeInCartesianSpace(renderSpace)
                            },
                            new LineSegment {
                                Point = rightTopAnchor.LocalizeInCartesianSpace(renderSpace)
                            },
                            new QuadraticBezierSegment
                            {
                                Point1 = rightTopAnchorControlPoint.LocalizeInCartesianSpace(renderSpace),
                                Point2 = topCenterAnchor.LocalizeInCartesianSpace(renderSpace)
                            },
                            new QuadraticBezierSegment
                            {
                                Point1 = leftTopAnchorControlPoint.LocalizeInCartesianSpace(renderSpace),
                                Point2 = leftTopAnchor.LocalizeInCartesianSpace(renderSpace)
                            },
                            new LineSegment {
                                Point = leftBaseAnchor.LocalizeInCartesianSpace(renderSpace)
                            }
                        }
                    }
                }
            });
        }
Esempio n. 23
0
        public static Geometry CalculateArcPath(Size size, double radius, double arcWidth, double angle, double offsetAngle)
        {
            if (radius <= 0 || arcWidth <= 0 || radius - arcWidth < 0)
            {
                return(Geometry.Empty);
            }

            var startOuterPolar = new PolarPoint(offsetAngle, radius);
            var endOuterPolar   = new PolarPoint(offsetAngle + angle, radius);
            var startInnerPolar = new PolarPoint(offsetAngle, radius - arcWidth);
            var endInnerPolar   = new PolarPoint(offsetAngle + angle, radius - arcWidth);

            var isLargeArc = angle > 180;

            var startOuter = startOuterPolar.ToCartesian().LocalizeInPolarSpace(size);
            var endOuter   = endOuterPolar.ToCartesian().LocalizeInPolarSpace(size);
            var startInner = startInnerPolar.ToCartesian().LocalizeInPolarSpace(size);
            var endInner   = endInnerPolar.ToCartesian().LocalizeInPolarSpace(size);

            return(new PathGeometry
            {
                Figures = new PathFigureCollection
                {
                    new PathFigure
                    {
                        StartPoint = startOuter,
                        Segments = new PathSegmentCollection
                        {
                            new ArcSegment
                            {
                                Size = new Size(radius, radius),
                                Point = endOuter,
                                IsLargeArc = isLargeArc
                            },
                            new LineSegment
                            {
                                Point = endInner
                            },
                            new ArcSegment
                            {
                                Size = new Size(radius - arcWidth, radius - arcWidth),
                                Point = startInner,
                                SweepDirection = SweepDirection.Clockwise,
                                IsLargeArc = isLargeArc
                            }
                        }
                    }
                }
            });
        }
Esempio n. 24
0
        /// <summary>
        /// Add a new triangle given vertex indices and adjacent half-edge ids.
        /// </summary>
        private int AddTriangle(PolarPoint i0, PolarPoint i1, PolarPoint i2, int a, int b, int c)
        {
            var t = trianglesPointIndex;

            triangles[t]     = i0;
            triangles[t + 1] = i1;
            triangles[t + 2] = i2;

            Link(t, a);
            Link(t + 1, b);
            Link(t + 2, c);

            trianglesPointIndex += 3;

            return(t);
        }
Esempio n. 25
0
        private PolarPoint cart2polar(int x, int y)
        {
            var polar = new PolarPoint();

            polar.r = Math.Sqrt(Math.Pow((x - this.origin.X), 2) + Math.Pow((y - this.origin.Y), 2));

            if (x != 0)
            {
                polar.theta = Math.Atan(y / x);
            }
            else
            {
                polar.theta = 0;
            }
            return(polar);
        }
Esempio n. 26
0
    }                                                                                                                                   // rechnet kartesische Koordinaten in Polarkoordinaten (r,phi) um

    public Point PolarPointToPoint(PolarPoint pp, Point cp)
    {
        double r = pp.R, phi = pp.Phi;
        int    centerX = cp.X, centerY = cp.Y;
        int    x, y;

        // umrechnen von polar zu point
        if (phi >= 0 && phi <= 90)
        {
            x = centerX + Convert.ToInt32(Math.Cos(phi) * r);                             // x ist die Ankatete eines rechtwinkligen Dreieck und r ist dessen Hypotenuse
            y = centerY + Convert.ToInt32(Math.Sin(phi) * r);                             // y ist die Gegenkatete eines rechtwinklingen Dreicke und r ist dessen Hypotenuse
        }
        else
        {
            if (phi <= 180)
            {
                x = centerX - Convert.ToInt32(Math.Cos(phi) * r);
                y = centerY + Convert.ToInt32(Math.Sin(phi) * r);
            }
            else
            {
                if (phi <= 270)
                {
                    x = centerX - Convert.ToInt32(Math.Cos(phi) * r);
                    y = centerY - Convert.ToInt32(Math.Sin(phi) * r);
                }
                else
                {
                    if (phi <= 360)
                    {
                        x = centerX + Convert.ToInt32(Math.Cos(phi) * r);
                        y = centerY - Convert.ToInt32(Math.Sin(phi) * r);
                    }
                    else
                    {
                        // Winkel über 360° sind Fehler.
                        x = 0;
                        y = 0;
                    }
                }
            }
        }
        return(new Point(x, y));
    }                                                                                                                                   // rechnet Polarkoordinaten (r,phi) in kartesische Koordinaten (x,y) um
Esempio n. 27
0
        /// <summary>
        /// Insert new node into double-linked list
        /// </summary>
        private PointNode InsertNode(PolarPoint p, PointNode prev = null)
        {
            var node = new PointNode(p);

            if (prev == null)
            {
                node.Previous = node;
                node.Next     = node;
            }
            else
            {
                node.Next          = prev.Next;
                node.Previous      = prev;
                prev.Next.Previous = node;
                prev.Next          = node;
            }

            return(node);
        }
Esempio n. 28
0
        public CustomPath CalculateActiveArcPath(Point center, double radius, double arcWidth, double angle)
        {
            var startOuterPolar = new PolarPoint(90, radius);
            var endOuterPolar   = new PolarPoint(90 + angle, radius);
            var startInnerPolar = new PolarPoint(90, radius - arcWidth);
            var endInnerPolar   = new PolarPoint(90 + angle, radius - arcWidth);
            var space           = new Size(PART_main.RenderSize.Width, PART_main.RenderSize.Height * 2);

            return(new CustomPath(null)
            {
                Data = new PathGeometry
                {
                    Figures = new PathFigureCollection
                    {
                        new PathFigure
                        {
                            StartPoint = startOuterPolar.ToCartesian().LocalizeInPolarSpace(space),
                            Segments = new PathSegmentCollection
                            {
                                new ArcSegment
                                {
                                    Size = new Size(radius, radius),
                                    Point = endOuterPolar.ToCartesian().LocalizeInPolarSpace(space),
                                    IsLargeArc = false
                                },
                                new LineSegment
                                {
                                    Point = endInnerPolar.ToCartesian().LocalizeInPolarSpace(space)
                                },
                                new ArcSegment
                                {
                                    Size = new Size(radius - arcWidth, radius - arcWidth),
                                    Point = startInnerPolar.ToCartesian().LocalizeInPolarSpace(space),
                                    SweepDirection = SweepDirection.Clockwise,
                                    IsLargeArc = false
                                }
                            }
                        }
                    }
                }
            });
        }
Esempio n. 29
0
        public void ToCartesian_FourCorners_UnitVectors()
        {
            //----------- Arrange -----------------------------
            var right = new PolarPoint(1, 0);
            var up    = new PolarPoint(1, Math.PI / 2d);
            var left  = new PolarPoint(1, Math.PI);
            var down  = new PolarPoint(1, 3 * Math.PI / 2d);

            //----------- Act ---------------------------------
            var ihat      = right.ToCartesian();
            var jhat      = up.ToCartesian();
            var minusihat = left.ToCartesian();
            var minusjhat = down.ToCartesian();

            //----------- Assert-------------------------------
            Assert.True(ihat.X.Is(1, 1e-12) && ihat.Y.Is(0, 1e-12));
            Assert.True(jhat.X.Is(0, 1e-12) && jhat.Y.Is(1, 1e-12));
            Assert.True(minusihat.X.Is(-1, 1e-12) && minusihat.Y.Is(0, 1e-12));
            Assert.True(minusjhat.X.Is(0, 1e-12) && minusjhat.Y.Is(-1, 1e-12));
        }
Esempio n. 30
0
        public void Day10Part2_TestSolution()
        {
            string[] map = DayDataUtilities.ReadLinesFromFile("day10.txt");
            Assert.NotNull(map);
            var sut         = new MonitorStation(map);
            var bestStation = new Point(26, 28);
            var dictLos     = sut.CalculateLOS(bestStation);

            Assert.Equal(256, dictLos.Count);

            var polarPts = sut.MakeMapPolar(bestStation);

            // Start point is angle -1,5707963267948966, ie. -pi/2, wrap angle by adding 2 pi
            foreach (var pt in polarPts)
            {
                if (pt.angle < -1.5707963267948966)
                {
                    pt.angle += 2 * Math.PI;
                }
            }

            Assert.Equal(sut.Asteroids.Count - 1, polarPts.Count);
            SortedDictionary <double, List <PolarPoint> > dictPolar = sut.MakePolarLOS(polarPts);

            sut.DumpPolarLOS(dictPolar);
            Assert.Equal(267, dictPolar.Count);
            int        count   = 1;
            PolarPoint rock200 = null;

            foreach (var angle in dictPolar.Keys)
            {
                if (count == 200)
                {
                    rock200 = dictPolar[angle].Find(r => r.dist == dictPolar[angle].Min(p => p.dist));
                    break;
                }
                count++;
            }
            Assert.NotNull(rock200);
            Assert.Equal(1309, rock200.cartPt.Y + rock200.cartPt.X * 100);
        }