2011-07-22 3 views
0

touchesEndedイベントから取得した2つのCGPoints AとBともう1つのCGPoint Cがあります。 ポイントA(x1、y1)、B(x2、y2)、C(x3、y3)については、 の3点が直線であるかどうかを確認したいと思います。 x1 y2-y3)+ x2(y3-y1)+ x3(y1-y2)= 0 しかし、数式は全く役に立たない。それは、アルゴリズムの質問です - は、iOS に3点の共線を決定する他の方法は、これは本当にiOSの質問、あるいはプログラミングの問題ではありませんおかげ arnietermiOS:3つのCGPointが直線であるかどうかを調べる方法

+2

(http://stackoverflow.com/questions/328107/ [どのようにポイント線分上の2つの他の点の間にあると判断することができますか?]の可能な重複どのようにしてポイントを決定するか) – DarkDust

+0

重複する質問はPythonの場合ですが、数学は同じです(コードもほぼ同じです同じ)。 – DarkDust

答えて

1

あります。

与えられたアルゴリズムが正しいかどうかはわかりません - 私が正しい答えと考えるものについては、コメント内の製品間の回答を参照してください。どのようにしてあなたの数式は役に立たないのですか?ここはコードで、btwです。 (ブラウザで入力したコード、チェックしない):

CGPoint p1; 
CGPoint p2; 
CGPoint p3; 
const float closeEnough = 0.00001; // because floats rarely == 0 

float v1 = p1.x * (p2.y - p3.y); 
float v2 = p2.x * (p3.y - p1.y); 
float v3 = p3.x * (p1.y - p2.y); 

if (ABS(v1 + v2 + v3) < closeEnough) 
{ 
    // your algorithm is true 
} 
+0

この式は、3つの点が直線である場合にのみ機能します。私の場合、ユーザーのタッチポイントは開始点と終了点と正確にインラインでは表示されません。 –

+0

代わりに、これらの3つの点の間の角度を見つけようとします。それは助けになるだろうか?問題は、ユーザーが行列形式で配置された点のセットをタップしていることです。私が角度を考慮したとしても、角度の範囲は何を考慮する必要がありますか? –

関連する問題