4

スワイプした線がまっすぐかどうかをあいまいに認識する iPhone コードを書いています。2 つの終点の方位を取得し、それを 0、90、180、および 270 度と比較します。許容範囲はプラスマイナス 10 度です。今、私はたくさんの if ブロックを使ってそれをやっていますが、これは非常に不格好に思えます。

方位0..360、公差パーセンテージ (たとえば 20% = (-10° から +10°))、および90 度などの直線角度が与えられた場合、方位が公差内にあるかどうかを返す関数を作成する方法は?

更新: おそらく、私は具体的すぎます。数値が別の数値のパーセンテージ内にあるかどうかを判断する優れた一般的な関数は、多くの分野で役立つと思います。

例: swipeLength の数値はmaxSwipe10 %以内ですか? それは役に立ちます。

 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

私が何を得ているか分かりますか?

4

3 に答える 3

4
int AngularDistance (int angle, int targetAngle) 
{

    int diff = 0;
    diff = abs(targetAngle - angle)

    if (diff > 180) diff = 360 - diff;

    return diff;
}

これは、任意の 2 つの角度で機能するはずです。

于 2009-08-24T05:16:39.537 に答える
1

小数としての20%は0.2に等しい。100.0で割るだけで、小数が得られます。2.0で割ると、許容範囲の半分になります。(200.0除数に結合)

そこから、1.0を加算および減算して、90%および110%の値を取得します。最初の数字が範囲の間にある場合は、そこにあります。

BOOL isNumberWithinPercentOfNumber(float firstN, float percent, float secondN) {
      float decimalPercent = percent / 200.0;
      float highRange = secondN * (1.0 + decimalPercent);
      float lowRange = secondN * (1.0 - decimalPercent);
      return lowRange <= firstN && firstN <= highRange;
 }

注:ここでNaNまたは負の値をチェックする際にエラーは発生しません。プロダクションコード用に追加することをお勧めします。

更新:両方の+/-範囲を含むようにパーセントを作成します。

于 2009-08-25T06:52:13.393 に答える
0

洗練された/新しい質問への回答:

bool isNumberWithinPercentOfNumber (float n1, float percentage, float n2)
{

if (n2 == 0.0) //check for div by zero, may not be necessary for float
   return false; //default for a target value of zero is false
else
   return (percentage > abs(abs(n2 - n1)/n2)*100.0);
}

説明するには、テスト値とターゲット値の絶対差を取り、それをターゲット値で割ります (2 つの 'abs'olute 呼び出しにより、これが負のターゲット数とテスト数でも機能することが確認されますが、負のパーセンテージ/許容範囲では機能しません)。 . これにより、小数として表される差のパーセンテージが得られ、それに 100 を掛けてパーセンテージの「一般的な」表現が得られます (10% = 0.10)。

于 2009-08-25T06:18:13.993 に答える