2015-05-06 2 views
2

У меня возникла проблема с получением точки на дуге. Я нарисовал дугу. И я хочу получить точку на дуге, используя радиус, начало и угол. В моем случае происхождение - 150 150. Радиус равен 50. Начальный угол равен 0, а конечный угол равен 180. Когда я пытаюсь получить точку под углом M_PI/2, она должна быть выровнена по середине дуги, но она дает неправильные значения x и y. Пожалуйста, дайте мне знать, если у меня что-то не хватает.Точка на дуге с использованием цели c

enter image description here

Мой код

- (void)drawRect:(CGRect)rect 
{ 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSetLineWidth(context, 4.0); 
    CGContextSetStrokeColorWithColor(context, 
            [UIColor blueColor].CGColor); 
    CGContextAddArc(context, 150, 150, 50, 0, M_PI, 0); 
    CGContextStrokePath(context); 

} 

-(CGPoint)getPoint:(float)angle 
{ 
    float radius = 50; 
    //float x = 160+radius*cos(-M_PI/2); 
    //float y = 160+radius*sin(-M_PI/2); 

    float x = 150+radius*cos(angle); 
    float y = 150+radius*sin(angle); 

    return CGPointMake(x, y); 
} 
+0

Какой результат вы получите? Поскольку cos (-pi/2) = 0 и sin (-pi/2) = -1, я бы ожидал (x, y) = (150, 100). Получается ли этот ответ? Мне не нравятся все эти закодированные магические числа. Ваш метод менее общий. Я бы передал их в качестве параметров. – duffymo

+1

То, что мне не хватает, это угол, переданный 'getPoint', и метод, который вы используете для его рисования. Кроме того, я полагаю, что вы должны вычесть «радиус» sin (угол) ', так как ось y инвертируется на iOS. – Sulthan

+0

@duffymo, когда я передаю M_PI/2 методу getPoint, я получаю 177 и 192. Это неверно. Это вопрос – SRI

ответ

2

Если вы получаете точку (177, 192), как вы написали в комментариях, что означает, что угол, который вы прошли приблизительно равна 1. Это не M_PI/2, что составляет примерно 1.57.

Таким образом, проблема заключается в значении, которое вы передаете, а не в указанной функции. Возможно, вы по ошибке округлили угол до целого числа?

+0

Не могли бы вы проверить мой код? – SRI

+1

@TENSRI Вы еще не добавили соответствующую часть кода к своему вопросу, в частности, как вы называете 'getPoint'. – Sulthan

Смежные вопросы