0

私は客観的 c とココアの開発に比較的慣れていないので、時計回りまたは反時計回りのマウス/カーソルのドラッグを検出する比較的簡単な方法があるかどうか知りたいですか?

4

1 に答える 1

3

ココアで可能かどうかはわかりません。開始点、終了点、およびいくつかの中間点の座標を取得し、その点に基づいて 2 つのベクトルを作成し、三角形の符号付き領域を見つけることで、この問題を自分で解決することができます。計算については、このドキュメントを参照してください(「Implementing CCW」を検索してください)。

簡単な関数を次に示します。

int ccw(CGPoint a, CGPoint b, CGPoint c)
{
    const int area2 = (b.x - a.x)*(c.y - a.y) - (b.y - a.y)*(c.x - a.x);
    if (area2 < 0) return -1; // clockwise
    if (area2 > 0) return +1; // counter-clockwise
    return 0; // collinear
}

編集:y軸はおそらく上から下を指すことに注意してください。そのため、関数に渡す前に、結果の符号を切り替えるか、ポイントのy座標を変換する必要がある場合があります。

于 2013-03-28T06:31:21.493 に答える