Je suis en train d'écrire du code iPhone qui reconnaît fuzzily si une ligne balayée est droite-ish. J'obtiens le relèvement des deux extrémités et je le compare à 0, 90, 180 et 270 degrés avec une tolérance de 10 degrés plus ou moins. En ce moment je le fais avec un tas de blocs si, ce qui semble super maladroit.Comment puis-je déterminer si un nombre est dans un pourcentage d'un autre nombre?
pour l'écriture d'une fonction qui, compte tenu de la portant 0..360, la tolérance pourcentage (par exemple 20% = (-10 ° à + 10 °)) et un angle droit comme 90 degrés , retourne si le roulement est dans la tolérance?
Mise à jour:Je suis peut-être trop spécifique. Je pense qu'une bonne fonction générale qui détermine si un nombre est dans un pourcentage d'un autre nombre a une utilité dans de nombreux domaines.
Par exemple: Est-ce le nombre swipeLength dans les 10% de maxSwipe? Ce serait utile.
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
Voyez-vous ce que je veux dire?
Les angles sont-ils différenciés à 180 degrés, par exemple, une ligne verticale tracée de haut en bas 90 et la même ligne tirée de bas en haut 270, ou sont-ils identiques? –
Voulez-vous vraiment dire que la tolérance est un pourcentage? Pourcentage de quoi? Je pense qu'une simple différence angulaire a plus de sens en tant que seuil. –
Une question connexe: http://stackoverflow.com/questions/338762/how-do-you-calculate-the-angle-between-two-normals-in-glsl (ceci montre comment calculer l'angle entre deux vecteurs) . –