Построение курса между двумя точками в плоскости x-y

Я пытаюсь реализовать небольшой радар, который отображает цели на основе координат широты и долготы, аналогично радару в приложении Layar AR для iPhone. У меня есть компас и locationManager, которые работают, чтобы получить широту/долготу, направление и расстояние между двумя точками. Однако у меня возникли проблемы с нанесением точек на плоскость xy. Не могли бы вы указать мне правильное направление (так сказать)?

Это метод, который я использую для построения графика, но результаты неверны:

-(void) addTargetIndicatorWithHeading:(float)heading andDistance:(float)distance{
    //draw target indicators
    //need to convert radians and distance to cartesian coordinates
    float radius = 50;
    float x0 = 0.0; 
    float y0 = 0.0;

    //convert heading from radians to degrees
    float angle = heading * (180/M_PI);

    //x-y coordinates
    float x1 = (x0 + radius * sin(angle)); 
    float y1 = (y0 + radius * cos(angle)); 

    TargetIndicator *ti = [[TargetIndicator alloc] initWithFrame:CGRectMake(x1, y1, 5, 5)];
    [self addSubview:ti];
    [ti release];

}

person user855723    schedule 28.07.2011    source источник


Ответы (2)


Я предполагаю, что проблема заключается в том, что исходная координата текущего представления не добавляется к вашей координате. просто измените свои x1 и y1, добавив origin.x и origin.y текущего представления, к которому вы добавляете ti в качестве подпредставления.

person Satyavrat    schedule 28.07.2011
comment
Да вы правы. Я могу добавить свои origin.x и origin.y, используя переменные x0 и y0. - person user855723; 29.07.2011

Я понял, что было не так, но я не знаю причин этого. Во-первых, мне не следовало преобразовывать радианы в градусы. Это дает мне правильное позиционирование, но оно повернуто на 180 градусов. Поэтому, чтобы это исправить, я вычитаю радианы из PI.

Вот решение:

-(void) addTargetIndicatorWithHeading:(float)heading andDistance:(float)distance{
    //draw target indicators
    //need to convert radians and distance to cartesian coordinates
    float radius = 50;

    //origin offset
    float x0 = 50.0; 
    float y0 = 50.0;

    //convert heading from radians to degrees and rotate by 180 deg
    float angle = M_PI - heading; 

    float x1 = (x0 + radius * sin(angle));   
    float y1 = (y0 + radius * cos(angle)); 

    TargetIndicator *ti = [[TargetIndicator alloc] initWithFrame:CGRectMake(x1, y1, 5, 5)];
    [self addSubview:ti];
    [ti release];


}
person user855723    schedule 29.07.2011