• ベストアンサー

「最短距離」の接触判定

1.マウスポインタの左ドラッグ中には、通った軌跡をサンプリングし、Flagを1にして座標(x,y)を「Point」という変数に記録(x[Point],y[Point],Flag[Point]=1)していくとともに、隣り合う座標点を結んで線を描く。 2.マウスポインタの右ドラッグ中に、指定した範囲周辺(例えば50*50[mm]以内)にサンプリングされた座標点が入ったら「接触」と判定する。 3.この際、複数の座標が範囲内に含まれている場合は、マウスポインタの中心から最短距離にある座標点を「接触点」とする。 4.接触点に対してアクションを起こす(例えば、移動させる、線の色や太さを変える、など)。 このようなプログラムにおいて、「最短距離にある座標点」の検出をどのように記述すればいいでしょうか。 接触判定、最短距離の接触点の検出、描線の開始・終了点の検出、アクション、という順番に記述しようと思うのですが、 【接触判定】 マウスポインタの位置と各Pointとの距離の絶対値をfor文で調べ、指定範囲内に収まっているものがあれば接触と判定。 【最短距離の接触点の検出】 ? 【描線の開始・終了点の検出】 最短距離の接触点から描画開始・終了方向にそれぞれシーケンシャルサーチして、Flagが1から0になるところの点をそれぞれ開始点・終了点とする。 【アクション】 開始点~終了点までの各Pointにアクションを起こす。 このような流れです。具体的にどのように最短距離の検出を書けばいいか、ご指導いただけませんでしょうか。使用ソフトはC++Builder4です。

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

  • ベストアンサー
  • mcq
  • ベストアンサー率48% (45/93)
回答No.1

前もって、暫定最短点及び暫定最短距離を保存する変数をそれぞれ用意しておき、 【接触判定】のfor文の中で、求めた距離が暫定最短距離よりも短ければ暫定最短点及び暫定最短距離を更新 とすれば良いのでは無いでしょうか?

その他の回答 (2)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

pointの座標を検索するより、実際に描画されている点でマウスから50*50の範囲で最小となる座標を探す方がいいかも内側から探していけばいいし。

  • shkwta
  • ベストアンサー率52% (966/1825)
回答No.2

ピタゴラスの定理を使えばよいのでは? つまり、サンプリングした座標点をX1, Y1とし、右ドラッグしているマウスポインタの座標点をX2, Y2とします。 D = (X1 - X2)の2乗 + (Y1 - Y2) の2乗 を計算して、Dのもっとも小さくなる点を選べばよいとおもいます。(Dは距離の2乗に相当します)

関連するQ&A

  • 最短距離の問題です

    最短距離の問題です 座標空間において,x, y, z 座標の少なくとも1つが整数であるような点の集合 A を考える. (0,0,0) から (3,3,3) まで,A に属する点だけを通って移動する 最短経路の長さを求めよ. 答えは√41 です

  • 任意の点と任意の線分との最短距離となる点

    現在C++でシューテイングゲームを作成しています。 当たり判定の計算として二次元座標の三点で判定を取れないかと考えて詰まっています。 具体的には任意の点Pと任意の点ABからなる線分の最短距離を算出したいのですが、これは可能なのでしょうか

  • エクセルで曲線までの最短距離、座標を算出する方法

    お世話になります。 エクセルで固定点から曲線までの最短距離および座標の算出方法が分からなくて、 悩んでいます。 例えば、固定点(2,20)から曲線(y=100/x)までの最短距離とその座標の算出する方法ですが、 エクセル関数およびソルバー機能等を使ってできないでしょうか。 ご教示宜しくお願いします。

  • 曲線と座標が最短距離となる直線の座標について2

    (1)曲線(例:y= a/(x - b)と固定点の(2)座標(0、0)があります。 (1)曲線と(2)固定座標が「最短距離となる曲線上の座標(1)」の計算方法を教えて頂けないでしょうか?

  • 曲線と座標が最短距離となる直線の座標について

    (1)曲線(例:y=1/1000 * (a/x + b))と固定点の(2)座標(0、0)があります。 (1)曲線と(2)固定座標が「最短距離となる曲線上の座標(1)」の計算方法を教えて頂けないでしょうか?

  • 楕円内の任意の点から楕円周までの最短距離

    長半径がaで、短半径がbである楕円内に、ランダムに点(座標X0,Y0)をプロットし、その点から楕円周までの最短距離をperlを使って計算したいと思っています。 最終的には、最短距離の分布がどのようになっているのかを求めたいと思っています。   この計算の結果は、細胞の形を楕円に近似したときに、特定の組織の位置がランダムな場所にあるのか、細胞の表面近くに存在する傾向があるのかを調べるためのコントロールデータとして使う予定でいます。   しかし、座標X0,Y0から、楕円周までの最短距離をどのようにして計算したらよいのか見当もつきません。計算過程は省いていただいても構いませんので、最終的にどのような式を使えば計算できるのか、教えていただけないでしょうか。 よろしくお願いします。

  • 2つの円が衝突しない距離 の早い求め方

    平面状の2つの円 点1[座標x1, y1 半径r1]   と  点2[座標x2, y2 半径r2] が接触しているかを (r1+r2)*(r1+r2) 左が右 (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) より大きいか否かで、衝突を判定できると学びました。 そして接触時に『2つの円が衝突しない距離(点2を動かす距離)』 を求めたいのですが、 今は角度を求める為にルートとアークコサインを使い(電卓) r1とr2の和を斜辺にして三角関数で求めていて時間がかかります。 これを何かもっと簡単に求める方法は無いものでしょうか・・?

  • 時間を判定するリンクボタン

    すみません。どなたか詳しい方お願いします。 Flashをやっているのですが ボタンの領域内に入ったときに時間判定をさせまして マウスポインタが3秒間領域内にあった場合→シーン移動 マウスポインタが2秒以内のうちに領域の外に出た場合→そのまま移動なし このような振り分けをしたいと思っています。 アクションスクリプトでやるのであろうということはわかるのですが プログラムがさっぱりわからなくて 何をどうしたらよいのか困っています。 詳しい方ご回答お願いいたします。 当方の所持していますバージョンはMXです。

    • ベストアンサー
    • Flash
  • 2つの直線の距離

    2点P(2,1,3)とQ(1,2,1)を通る直線と、2点R(-1,-2,-2)とS(1,-4,0)を通る直線の最短距離を求めよ という問題があるのですが、それぞれの直線の方程式は出せましたが、距離を出す方法が分かりません。二つの直線に垂直な直線を出して交点の座標から出せるかな?と思いましたが・・・なんとなく違うような気がしています。 もっと良い回答はないでしょうか?

  • 空間座標 球面上の点と空間にある点の距離について

    空間座標において 「『球面上の点と空間にある点P』との(最短)距離」は球面中心と点Pを結んだ距離と球面の半径と差で求めると思うのですが、感覚的にはわかる気がしますし、平面座標だと分かりますが、空間座標になると本当にそうなのかと思ってしまいます。式で証明することができるのでしょうか。 また、「『球面上の点と直線の点』との距離」や「『球面上の点と平面の点』との距離」も同じように球面の半径から直線の点もしくは平面の点に垂線を下ろして考えるのでしょうか。