public void PointsOnACircleTestCase1() { var center = new Point(2472, 2472); var calc = new CircleCalculator(center, 384); int angleIncrement = 30; for (int angle = 90; angle <= 270; angle += angleIncrement) { Point point = calc.CalculatePointOnCircle(angle); string result = string.Format(CultureInfo.CurrentCulture, "Drawing at ({0}, {1}) Angle is {2}", point.X, point.Y, angle); Debug.WriteLine(result); } }
private Area GetProposedAreaSemiCircle(double actualWidth, double actualHeight, Point centre, Func<Area, ProximityTestResult> overlapsWithOthers) { // A angle of 0 degrees in this context is moving directly to the right this.angle = this.dimensions.CalculateNextAvailableAngle(); Area proposedArea; var calc = new CircleCalculator(centre, this.angle); double radius = 250; ProximityTestResult proximityResult = null; do { if (proximityResult != null && proximityResult.Proximity == Proximity.VeryClose) { radius += LayoutConstants.MinimumDistanceBetweenObjects / 2; } else { radius += LayoutConstants.MinimumDistanceBetweenObjects; } proposedArea = new Area(calc.CalculatePointOnCircle(radius), actualWidth, actualHeight); proposedArea = proposedArea.OffsetToMakeTopLeftCentre(); proximityResult = overlapsWithOthers(proposedArea); } while (proximityResult.Proximity == Proximity.Overlapping || proximityResult.Proximity == Proximity.VeryClose); return proposedArea; }