2013-03-14 6 views
6

Dies ist so sehr eine iOS-Frage, da es meine derzeitige Unfähigkeit ist, Koordinatengeometrie zu machen. Gibt einen CGPoint an, der als ein Punkt dient, durch den die Linie verläuft, und einen Winkel im Bogenmaß. Wie zeichne ich eine Linie, die sich über die Grenzen des Bildschirms erstreckt (unendliche Linie)?Wie zeichne ich eine Linie mit einem Mittelpunkt und Winkel in iOS?

Ich verwende Quartz2d, ​​um dies zu tun, und die API zum Erstellen einer Linie ist auf zwei Punkte als Eingabe beschränkt. Wie konvertiere ich einen Punkt und einen Winkel zu zwei Punkten an den Grenzen des iOS-Geräts?

+0

http://stackoverflow.com/a/1571429/1311910 – 7usam

Antwort

8

Dies beginnt mit einfacher Trigonometrie. Sie müssen die X- und Y-Koordinate des 2. Punktes berechnen. Mit einem Ursprung von 0,0 und eine Linie der Behandlung, die gerade nach rechts, wie 0 Grad geht, und geht gegen den Uhrzeigersinn (gegen den Uhrzeigersinn für einige von Ihnen), tun Sie:

double angle = ... // angle in radians 
double newX = cos(angle); 
double newY = sin(angle); 

Dieser mit einem Radius von 1 annimmt . Multiplizieren Sie jedes Mal einen gewünschten Radius. Wählen Sie eine Zahl, die größer ist als der Bildschirm, z. B. 480 für ein iPhone oder 1024 für ein iPad (vorausgesetzt, Sie möchten Punkte und keine Pixel).

Fügen Sie dann den ursprünglichen Punkt hinzu, um den endgültigen Punkt zu erhalten.

Angenommen, Sie haben CGPoint start, double angle und eine Länge, Ihr letzten Punkt ist:

double endX = cos(angle) * length + start.x; 
double endY = sin(angle) * length + start.y; 
CGPoint end = CGPointMake(endX, endY); 

Es ist in Ordnung, wenn der Endpunkt aus dem Bildschirm ist.

+0

Möglicherweise nützlich: Wenn Sie zwischen Radianten und Grad konvertieren müssen - http://iosdevelopertips.com/graphics/radians-to-degrees-and-degrees- to-radians.html –