Задача C - Что не так с этим вычислением большого круга? - PullRequest
0 голосов
/ 12 января 2012

Я пытаюсь сделать расчет большого круга . Как вы должны понимать, класс Location имеет свойства, перечисленные в расчете.

- (NSNumber *)greatCircleDistanceFrom:(Location *)other
{
    // Unpack all the NSNumbers into doubles so we can manipulate them
    double selfCosRadLat = [self.cosRadLat doubleValue];
    double otherCosRadLat = [other.cosRadLat doubleValue];
    double selfRadLng = [self.radLng doubleValue];
    double otherRadLng = [other.radLng doubleValue];
    double selfSinRadLat = [self.sinRadLat doubleValue];
    double otherSinRadLat = [other.sinRadLat doubleValue];

    // Multiplying by 3959 calculates the distance in miles.
    double d = acos(selfCosRadLat
                    * otherCosRadLat
                    * cos(selfRadLng - otherRadLng)
                    + selfSinRadLat
                    * otherSinRadLat
                    ) * 3959.0;

    return [NSNumber numberWithDouble:d];
}

В половине случаев, когда я запускаю свой модульный тест, я получаю правильное значение. Другая половина, я получаю 6218.78265778.

1 Ответ

3 голосов
/ 12 января 2012

Убедитесь, что значение Location не равно nil или 0,0. Кажется, что причина, по которой вы получите такую ​​константу, заключается в том, что она выполняет математику, как если бы она была в 0 °, 0 °. Вы в 6218 милях от Западной Африки? Если это так, ваша функция работает отлично, но вызывающий ее метод иногда не предоставляет реальных значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...