• ベストアンサー

ライン上のカーソル移動させるには

ライン上のカーソル移動させるには こんにちは、図の赤い点をマウスでライン上で移動させるにはどう計算すればよろしいのでしょうか。 図の左では x 値を利用すればなんとなくできますが、右の図になるとかなり上のほうに飛んでってしまいます。 また y 値を利用しても同様のことが起こると思います。 正確にライン上にマウスがある場合のみに操作するとかなり使い勝手が悪くなってしまい、ある程度は遊び ? がないとダメだと思います。 どのように考えればよろしいのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.2

要は点(マウスカーソル)と直線を最短距離で結び、その交点を求めたいという事でしょうか? であるならマウスカーソルのポイントをP(x0,y0)とします。 まず直線A(m1*x+n1)に直交し、Pを通る直線B(m2*x+n2)の傾きm2を求めます。 m2 = -1 / m1; BはPを通るので y0 = m2*x0 + n2→n2 = y0 - m2*x0 これで直線Bが求まりました。 AとBの交点(x1,y1)を求めます。 m1*x1+n1 = m2*x1+n2→x1 = (n2 - n1) / (m1 - m2) y1 = m1 * x1 + n1 やっつけですがサンプルを作ってみました。(線上の赤い点がマウスカーソルにあわせて移動します) LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {   static HPEN red_pen = CreatePen( PS_SOLID , 2 , RGB(255,0,0) );   static POINT last_point;   static POINT point_on_line;   PAINTSTRUCT ps;   HDC hdc;   switch (message)   {   case WM_PAINT:     hdc = BeginPaint(hWnd, &ps);     MoveToEx( hdc , 0 , 50 , NULL );     LineTo( hdc , 640 , 480 + 50 );     SelectObject( hdc , red_pen );     Ellipse( hdc , point_on_line.x - 3 , point_on_line.y -3 , point_on_line.x + 3 , point_on_line.y + 3 );     EndPaint(hWnd, &ps);     break;   case WM_MOUSEMOVE:     {       double x0 = (double)LOWORD(lParam);       double y0 = (double)HIWORD(lParam);       double n1 = 50.0f;       double m1 = 480.0 / 640.0;       double m2 = -1.0 / m1;       double n2 = y0 - m2*x0;       double x1 = (n2 - n1) / (m1 - m2);       double y1 = m1 * x1 + n1;       point_on_line.x = (int)x1;       point_on_line.y = (int)y1;       InvalidateRect( hWnd , NULL , TRUE );     }     break;   case WM_DESTROY:     PostQuitMessage(0);     break;   default:     return DefWindowProc(hWnd, message, wParam, lParam);   }   return 0; } 「遊び」に関しては (x0,y0)と(x1,y1)の距離から判定すれば良いと思います。

yakionigiriX
質問者

お礼

わざわざサンプルを作っていただきありがとうございます。 プログラムが下手なのでちょっと挙動がおかしいですが、 それらしいものはできました。とても参考になりました。 ありがとうございました。

その他の回答 (1)

  • ken2r
  • ベストアンサー率25% (1/4)
回答No.1

図の意味が少し理解できなかったのですが、 マウスのイベントで座標が分かりますよね。 次にその座標が直線上にあるかどうかの判定ができればいい訳だから 円の半径を「遊び」にして 直線の円の交差の有無で判定してはどうでしょうか? 外してたらごめんなさい。

yakionigiriX
質問者

お礼

レスありがとうございます。 円の半径を使うのは気がつきませんでした。 方法の幅が広がります。 いろいろ試行錯誤してみます。

関連するQ&A

  • マウスカーソルが勝手に移動する

    昨日、子供(幼児)が何か触った後から発生したのですが、マウスカーソルが勝手に左方向へ移動します。飛ぶのではなく、継続的に左へ移動します。 それ以外の操作は可能で、マウスを速く右へ動かせば、カーソルも右へ行きます。が、細かい位置を指定するのは、カーソルが継続的に移動してしまうので困難です。 マウスを外しても、マウスパッドを無効にしても、ドライバを再インストールしても回復しません。 セーフモードで起動してもダメでした。 治す方法ご存知の方いましたらお願いします。

  • パソコンのカーソルの移動をマウスのみにしたい

    ノートパソコンのマウス操作のみでカーソル移動ができるようにしたい。指で操作するスペースに手がふれ、入力の際勝手にカーソルが移動してしまい困っています。おしえてください。

  • Excelでカーソルの移動がおかしい!

    Excelを使っていて、カーソルがおかしくなってしまいました。。 普通、文字入力を確定して、→キーを押すと右のセルに、←キーを押すと左のセルにカーソルが移動しますよね? それが、左右のキーを押すとシートごと移動してしまい、カーソルがあるセルの位置はそのままなんです。 (カーソルがシートに張り付いちゃった感じ) 上下でも同じです。 マウスで直接セルを指定しないと移動しません。 どうしたら直るのでしょうか? 教えてください! Excel2002です。 よろしくお願いします。

  • カーソルが移動

    友達のパソコン、打ってたら「Y」の文字だけ飛んでいく(意味がわかりますか?) と言うのです。カーソルが跳ねて移動するのでYを打つとき恐る恐る打つと言うのですが、どういうこと が考えられますか?教えて下さい。ちなみにOSはXPでマウスはコードレスではなくUSBで繋いでいるとのこと。

  • マウスの移動方向によってマウスカーソルの画像を切り替えたい

    今、マウスカーソルを(右向きの)車の画像にしています。 マウスを右方向に動かしたら、右方向の車の画像にし、逆に左方向に動かしたら左方向の車の画像に切り替える、という処理は可能でしょうか?可能である場合、どのようなスクリプトを書けばよいのでしょうか? マウスのx座標の値の増減で判断する、ということは想像できるのですが、書き方が分かりません。 右向きの車の画像のムービークリップ「car」のインスタンスには、下のスクリプトを記述しています。 onClipEvent (load) { Mouse.hide(); } onClipEvent (mouseMove) { this._x = _root._xmouse; this._y = _root._ymouse; updateAfterEvent(); } バージョンはMXです。 どうかよろしくお願いいたします。

    • ベストアンサー
    • Flash
  • 文章作成中にカーソルが勝手に移動する(2)

    以前にも同じタイトルで質問した者ですが、とりあえずマウスをはずして、タッチパッドでカーソルを操作しています。 しかし、文章の途中で勝手にカーソルが移動してるんです(>_<) 何ででしょうか??困ってます!!助けてください~

  • タッチパッドでマウスカーソルが画面全体を移動できない

    1280x800の解像度のノートパソコンを利用していますが、 タッチパッドでマウスカーソルを移動しようとすると 画面の左上から1024x768程度の領域しかマウスカーソルが 移動しません。 ※画面の解像度を1024x768/800x600/640x480などに変更すると 画面全体をマウスカーソルが移動します。 ※USBマウスでは1280x800の解像度でも画面全体をマウスカーソルが 移動します。 Linuxは経験が浅くどこに設定があるのかまったくわからず困っています。ヒントでもいただけると助かります。よろしくお願い致します。

  • autocad カーソル移動について

    AutoCADで、カーソルをX軸(水平)とY軸(垂直)にだけ移動させる直交モードというものがありますが、さらにX軸だけ、またはY軸だけに限定して移動させるモードは無いのでしょうか?

  • マウスのカーソルが勝手に動く

    さきほどマウス内のゴミとりをしたのですがそれ以来マウスのカーソルが勝手に動いてしまっています。(右にいったり左にいったり) これはマウスが壊れてしまっているのでしょうか? 使っているマウスはボール式マウスです。

  • マウスカーソルが勝手に移動します。

    光学式マウスのカーソルが勝手に散歩します。違うところをクリックしそうで使いにくいです。別のマウスに変えても同じでした。一月ほど前から突然そんな現象が現れ原因不明です。 WIN XPです。テキストファイルでは大丈夫です。ネット中が特にひどいです。左真横か左斜め上極端なときは端まで移動します。どうすれば治りますか?教えてください。

専門家に質問してみよう