Я пишу iPhone-код, который нечетко распознает, является ли строка с прямой видимостью прямолинейной. Я получаю подшипник двух конечных точек и сравниваю его с 0, 90, 180 и 270 градусами с допуском 10 градусов плюс или минус. Прямо сейчас я делаю это с кучей блоков, которые кажутся супер неуклюжими.Как определить, находится ли число в процентах от другого номера
Как написать функцию, которая, учитывая подшипник 0..360, допуска процент к (скажем, 20% = (от -10 ° до + 10 °)) и прямой угол , как 90 градусов , возвращает ли подшипник в пределах допуска?
Обновление:Я, возможно, слишком специфичен. Я думаю, что хорошая, общая функция, которая определяет, находится ли число в процентах от другого числа, имеет полезность во многих областях.
Например: Является ли число swipeLength в 10% из maxSwipe? Это было бы полезно.
BOOL isNumberWithinPercentOfNumber(float firstN, float percent, float secondN) {
// dunno how to calculate
}
BOOL result;
float swipeLength1 = 303;
float swipeLength2 = 310;
float tolerance = 10.0; // from -5% to 5%
float maxSwipe = 320.0;
result = isNumberWithinPercentOfNumber(swipeLength1, tolerance, maxSwipe);
// result = NO
result = isNumberWithinPercentOfNumber(swipeLength2, tolerance, maxSwipe);
// result = YES
Вы видите, что я получаю?
Существуют ли углы на 180 градусов друг от друга, например, вертикальная линия, оттянутая сверху вниз 90 и одна и та же линия, оттянутая снизу вверх 270, или они одинаковы? –
Вы действительно имеете в виду толерантность как процент? Процент того, что? Я думаю, что простое угловое различие имеет больше смысла в качестве порога. –
Связанный вопрос: http://stackoverflow.com/questions/338762/how-do-you-calculate-the-angle-between-two-normals-in-glsl (это показывает, как вычислить угол между двумя векторами) , –