Exemple #1
0
        public void TopOfCirclePiWidth()
        {
            CircleArc arc = new CircleArc(Math.PI, Math.PI / 2);

            Assert.AreEqual(Math.PI, arc.GetRadianInterval().Item1);
            Assert.AreEqual(0, arc.GetRadianInterval().Item2);
        }
Exemple #2
0
        public void GetWidth()
        {
            double    width = 2;
            CircleArc arc   = new CircleArc(width, Math.PI / 2);

            Assert.AreEqual(width, arc.GetArcWidth());
        }
        public void AreNotColliding()
        {
            PlayerDot playerDot = new PlayerDot(200);
            CircleArc circleArc = new CircleArc(Math.PI / 2, Math.PI * 3.2);

            Assert.IsFalse(CollisionDetector.AreColliding(playerDot, circleArc));
        }
Exemple #4
0
        public void BeginsAtTopOfCircle()
        {
            CircleArc arc = new CircleArc(0, Math.PI / 2);

            Assert.AreEqual(Math.PI / 2, arc.GetRadianInterval().Item1);
            Assert.AreEqual(Math.PI / 2, arc.GetRadianInterval().Item2);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="ca"></param>
        /// <returns></returns>
        public static SliderPath ConvertCircleToBezier(CircleArc ca)
        {
            Vector2[] newAnchors = ConvertCircleToBezierAnchors(ca).ToArray();

            SliderPath newPath = new SliderPath(PathType.Bezier, newAnchors);

            return(newPath);
        }
Exemple #6
0
        public static CircleArc CreateArc(Drawing drawing, IList <IFigure> foundDependencies)
        {
            var result = new CircleArc()
            {
                Drawing = drawing, Dependencies = foundDependencies
            };

            return(result);
        }
        public void AreCollidingAtNear2Pi()
        {
            PlayerDot playerDot = new PlayerDot(200);

            playerDot.MoveCounterClockwise(Math.PI * 2.1);
            CircleArc circleArc = new CircleArc(0.5, Math.PI * 1.9);

            Assert.IsFalse(CollisionDetector.AreColliding(playerDot, circleArc));
        }
        public void AreNotCollidingAt0()
        {
            PlayerDot playerDot = new PlayerDot(200);

            playerDot.MoveCounterClockwise(Math.PI / 2);
            CircleArc circleArc = new CircleArc(Math.PI / 2, 0);

            Assert.IsFalse(CollisionDetector.AreColliding(playerDot, circleArc));
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="perfectAnchors"></param>
        /// <returns></returns>
        public static List <Vector2> ConvertCircleToBezierAnchors(List <Vector2> perfectAnchors)
        {
            CircleArc cs = new CircleArc(perfectAnchors);

            if (!cs.Stable)
            {
                return(perfectAnchors);
            }
            return(ConvertCircleToBezierAnchors(cs));
        }
Exemple #10
0
 public void enterCircleMode()
 {
     if (!placeingMode)
     {
         return;
     }
     Debug.Log("Circle Mode startet");
     circleMode    = true;
     circleCoutner = 1;
     circle        = new CircleArc();
 }
Exemple #11
0
        public void MoveCounterClockwise5PI()
        {
            CircleArc arc         = new CircleArc(Math.PI / 2, Math.PI / 2);
            double    pi          = Math.PI;
            double    startRadian = (pi / 2 + (pi / 2) / 2) + pi;
            double    endRadian   = (pi / 2 - (pi / 2) / 2) + pi;

            arc.MoveCounterClockwise(Math.PI * 5);

            Assert.AreEqual(startRadian, arc.GetRadianInterval().Item1, 0.01);
            Assert.AreEqual(endRadian, arc.GetRadianInterval().Item2, 0.01);
        }
Exemple #12
0
 public CircleEdge(CircleArc data, bool sense)
 {
     m_data = data;
     if (m_data.t_start < 0)
     {
         m_data.t_start += Mathf.PI * 2;
         m_data.t_end   += Mathf.PI * 2;
     }
     if (m_data.t_start > Mathf.PI * 2)
     {
         m_data.t_start -= Mathf.PI * 2;
         m_data.t_end   -= Mathf.PI * 2;
     }
     m_sense = sense;
 }
        /// <summary>
        ///
        /// </summary>
        /// <param name="cs"></param>
        /// <returns></returns>
        public static List <Vector2> ConvertCircleToBezierAnchors(CircleArc cs)
        {
            CircleBezierPreset preset = CirclePresets.Last();

            foreach (CircleBezierPreset CBP in CirclePresets)
            {
                if (CBP.MaxAngle >= cs.ThetaRange)
                {
                    preset = CBP;
                    break;
                }
            }

            List <Vector2> arc       = preset.Points.Copy();
            double         arcLength = preset.MaxAngle;

            // Converge on arcLength of thetaRange
            int    n  = arc.Count - 1;
            double tf = cs.ThetaRange / arcLength;

            while (Math.Abs(tf - 1) > 0.0000001)
            {
                for (int j = 0; j < n; j++)
                {
                    for (int i = n; i > j; i--)
                    {
                        arc[i] = arc[i] * tf + arc[i - 1] * (1 - tf);
                    }
                }
                arcLength = Math.Atan2(arc.Last()[1], arc.Last()[0]);
                if (arcLength < 0)
                {
                    arcLength += 2 * Math.PI;
                }
                tf = cs.ThetaRange / arcLength;
            }

            // Adjust rotation, radius, and position
            Matrix2 rotator = cs.Rotator;

            for (int i = 0; i < arc.Count; i++)
            {
                arc[i] = Matrix2.Mult(rotator, arc[i]) + cs.Centre;
            }
            return(arc);
        }
    private List <ICuttableEdge> MakeMiddleZone(CirclePrimitive player, CirclePrimitive target)
    {
        // 4 circle edges
        CircleArc       arc       = new CircleArc();
        CirclePrimitive primitive = MakeMiddlePrimitive(player, target);

        arc.radius  = primitive.radius;
        arc.center  = primitive.center;
        arc.t_start = 0;
        arc.t_end   = Mathf.PI * 2;

        var res = new List <ICuttableEdge>();

        var circle_edge = new CircleEdge(arc, false);

        for (int i = 0; i < 100; ++i)
        {
            res.Add(new LineEdge(new LineSegment {
                p0 = circle_edge.Eval(1.0f * i / 100).pt, p1 = circle_edge.Eval(1.0f * (i + 1) / 100).pt
            }, true));
        }

        return(res);
    }