Objective C で記述された iPhone アプリケーションがあり、ユーザーが画面に描画してパスを作成するタッチ ポイントを収集しています。
このデータを薄くできるようにしたい。ポイントの角度が特定のしきい値を超えているかどうかを確認することで、これを行うことを目指している方法の 1 つです。たとえば、a、b、c と呼ばれる線上の任意の 3 つの隣接する点を取得する場合、角度 ABC が 180 度から 5 度以内であれば、線にあまり影響を与えずに点 b を削除できます。
三角形ABCを2つの直角三角形に分割することでこれを達成しようとしています。次に acosf() を使用して、a での角度 (BAC) と c での角度 (BCA) を見つけます。これらの角度を 180 から差し引いて、ABC の角度を求めることができます。
私の問題は、 acosf() がしばしば NaN を返すことです。数値が返されたら、電卓で確認しましたが、値は正しいです。NaN を返す値を試してみましたが、電卓でも機能しません。これは、acosf() の範囲外であるためです。どうすればこれを回避できますか?
私が使用しているコードは次のとおりです。
float prevToNextDist = ccpDistance(prevPoint.location, nextPoint.location);
//work out the next point angle
float pointToNextDistance = ccpDistance(point.location, nextPoint.location);
float nextPointAngle = acosf((prevToNextDist/2)/pointToNextDistance);
nextPointAngle = CC_RADIANS_TO_DEGREES(nextPointAngle);
//work out the previous point angle
float prevToPointDistance = ccpDistance(prevPoint.location, point.location);
float prevPointAngle = acosf((prevToNextDist/2)/prevToPointDistance);
prevPointAngle = CC_RADIANS_TO_DEGREES(prevPointAngle);
//work out the point angle
float pointAngle = 180 - nextPointAngle - prevPointAngle;
何か案は?