2008-09-16 23 views
12

Biblioteka CoreGraphics firmy Apple definiuje dwie funkcje opisujące łuk.CGPathAddArc vs CGPathAddArcToPoint

  • CGPathAddArc dodaje łuk w oparciu o punkt środkowy, promień i parę kątów.
  • CGPathAddArcToPoint dodaje łuk na podstawie promienia i pary linii stycznych.

Szczegóły podano w the CGPath API reference. Dlaczego dwie funkcje? Prosta wygoda? Czy jest bardziej wydajny niż inny? Czy jest zdefiniowany pod względem drugiego?

Odpowiedz

8

Ten pierwszy dostaje część koła (naprawdę, przybliżenie jednego), podczas gdy drugi ujawnia fakt, że tworzysz ścieżkę Béziera. W zależności od tego, co faktycznie rysujesz, jeden lub drugi może być wygodniejszy. Naprawdę można uznać oba z nich za udogodnienia dla CGPathAddCurveToPoint.

+0

Czy chcesz sugerować, że CGPathAddArcToPoint może narysować krzywą, która nie jest okrągła? Myślałem, że wszystkie łuki są częściami koła. – benzado

+0

Koło nie może być opisane dokładnie przez krzywą Beziera. –

63

CGContextAddArc robi to:

addArc

gdzie czerwona linia to co zostanie narysowana, SA jest startAngle, EA jest endAngle, r radius, a X i Y są x i y. Jeśli masz poprzedni punkt, funkcja będzie ustawiać się od tego punktu do początku łuku (chyba że zachowasz ostrożność, ta linia nie będzie zmierzać w tym samym kierunku co łuk).

CGContextAddArcToPoint działa tak:

addArc

Jeżeli P1 jest aktualny punkt ścieżki, x1, x2, y1, y2 dopasować funkcje x1, x2, y1, y2 a R oznacza radius . Łuk rozpocznie się w tym samym kierunku co linia między bieżącym punktem a (x1, y1) i kończy się w kierunku pomiędzy (x1, y1) i (x2, y2). nie będzie linia na (x2, y2) Zatrzyma się na końcu okręgu.

+0

Doskonale! Założę się, że nie są to jedyne dwa. Gdzie mogę znaleźć diagramy dla innych interfejsów API? – CopperCash

+3

@CopperCash Przykro mi, że Cię rozczarowuję, ale to są tylko dwie, które znam, i narysowałem je w kodzie (głównie etykiety i punkty zostały dodane za pomocą edytora obrazów). –