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); }
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)); }
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); }
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)); }
public void enterCircleMode() { if (!placeingMode) { return; } Debug.Log("Circle Mode startet"); circleMode = true; circleCoutner = 1; circle = new CircleArc(); }
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); }
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); }