iOS CoreGraphics :Нарисуйте дугу, определите углы дуги из теоремы о пересекающихся хордах

Я пытаюсь понять, как нарисовать дугу в CoreGraphics. Я понимаю, какой метод вызывает make и как вычислять углы в следующем сценарии.

----------
|        |
*--------*

Когда обе точки находятся внизу прямоугольника. Однако, когда две точки находятся в других местах, я не знаю, как рассчитать правильный угол.

---------*
|        |
*---------

Смотрите нижнюю часть моего изображения.

enter image description here

У Рэя Вендерлиха отличный учебник о создании дуг только для первых упомянутых точек.

// sample code for creating arc for path from bottom of rect
CGMutablePathRef createArcPathFromBottomOfRect(CGRect rect, CGFloat arcHeight) {
  CGRect arcRect = CGRectMake(rect.origin.x, rect.origin.y + rect.size.height
    - arcHeight, rect.size.width, arcHeight);
  CGFloat arcRadius = (arcRect.size.height/2) + (pow(arcRect.size.width, 2) /
    (8 * arcRect.size.height));
  CGPoint arcCenter = CGPointMake(arcRect.origin.x + arc.size.width/2,
    arcRect.origin.y + arcRadius);
  CGFloat angle = acos(arcRect.size.width/ (2*arcRadius));
  CGFloat startAngle = radians(180) + angle;
  CGFloat endAngle = radians(360) - angle;
  CGMutablePathRef path = CGPathCreateMutable();
  CGPathAddArc(path, NULL, arcCenter.x, arcCenter.y, arcRadius, startAngle,
    endAngle, 0);
  return path;
}

Как рассчитать угол в других ситуациях, как показано внизу моего изображения?

6
задан dda 13 July 2012 в 16:03
поделиться