直線をマウスでクリックしたときの判定方法 – 固定ページ 2 – プログラミング – Home

直線をマウスでクリックしたときの判定方...
 
通知
すべてクリア

[解決済] 直線をマウスでクリックしたときの判定方法

固定ページ 2 / 2

ひで
 ひで
(@ひで)
ゲスト
結合: 23年前
投稿: 12
Topic starter  

ご返信ありがとうございます。

REE さん

> これでもいいですが、この程度であれば、
> その中心とマウスカーソルの座標の差を取ってその絶対値で比較することも出来ます。

そのほうが良いですね。その方法に変更します。

dairygoods さん

> ウィンドウの場合は、あらゆる形のものを扱うための、
> より複雑な当り判定計算が行われていますし、当り判定以外の様々な処理が伴います。
> 当り判定のためだけに流用するには、ウィンドウの仕組みは大袈裟過ぎると思います。

CWnd から派生させるのはベストではなさそうですね。

島 さん

>だから最初にどの程度近ければ良しとするのか尋ねたのですがねえ

>>一ドット程度が許容範囲ということでしたら、計算で線分にのっているかどうかの判断が
>>出来ると思います
>は参考にならなかったのでしょうか?

もちろん、参考になりました。
ただ、一ドットの許容範囲内で直線をクリックするのが、こんなに難しいとは思いません
でした。

> 総当りで判定させているようですが、可能性のあるものだけ検査すればいいのです
> 確実に離れている線分は判定対象から外すことで判定対象が絞れます

なるほど。私の思いつく判定対象の判別方法は、直線を囲む最小の四角形の中に、
クリックされたポイントが含まれているかどうかで判別できるように思います。
他にも判別方法があれば、ご教授願います。

>>(直線同士が重なった場合、どの直線にマウスメッセージが届くのでしょうか?)
> についてはどうお考えでしょうか?

私の作成しているアプリの場合、どちらの直線にマウスメッセージが
届いても問題ないので、このことに関しては問題にしていません。


返信引用
ひで
 ひで
(@ひで)
ゲスト
結合: 23年前
投稿: 12
Topic starter  

いくつかの報告をして、解決にしたいと思います。

PC のスペックは Pen4 2.2G です。

クライアント領域全体に 10000 本の直線をランダムに引き、
10000 本目の直線をクリックしたときにかかる判定時間は
約 0.016 [s] でした。1本目から順に hit をよんでいます。
もちろん、Release モードでコンパイルしています。

島さんの言われるように、判定対象を判別した場合、
今回の場合では若干の高速化が得られました。
直線の引かれ方によっては、より高速になると思います。

また、Takahashi さん、REE さんが言われるように、
差分の絶対値で判定を行った場合、PtInRect() に比べて、
非常に高速になりました。約 1/10 以下の時間になりました。

以上の例は、両者とも採用した場合です。

これで解決にしたいと思います。
ありがとうございました。


返信引用
固定ページ 2 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました