特定範囲内の線分を抽出する方法

このQ&Aのポイント
  • MySQLにてシステムの構築を考えていますが、特定範囲内に一部でも属す線分を抽出する方法について質問です。
  • 線分テーブル「tblLine」には開始座標と終了座標が記録されています。任意の座標点に近い線分を抽出したいと考えています。
  • 具体的には、任意の座標点の周囲10単位の四角形に一部でも属す線分を抽出したいですが、抽出条件の組み立て方がわかりません。
回答を見る
  • ベストアンサー

特定範囲内に一部でも属す線分を抽出する方法

現在MySQLにてシステムの構築を考えていますが、 SQLの組み立てについて壁に当たったので、質問させて頂きます。 線分の座標を表す以下のようなテーブルが存在するとします。 線分テーブル「tblLine」 項目:  開始X座標[SX],  開始Y座標[SY],  終了X座標[EX],  終了Y座標[EY] このテーブルから任意の座標点(PX,PY)に 近い線分を抽出しようと考えております。 具体的には、上記座標点のX座標、Y座標を プラスマイナス10して出来る以下の4点 (PX-10,PY-10) (PX+10,PY-10) (PX-10,PY+10) (PX+10,PY+10) からなる四角形に、線分の一部でも属すものを すべて抽出できればと考えています。 線分の一部でも属すもので、考えられるパターンは (1)線分すべてが四角形に含まれる。 (2)線分の開始点or終了点のどちらかが四角形に含まれる。 (3)線分の開始点or終了点を除く一部が四角形に含まれる。 になると思います。 (1)、(2)については、開始点と終了点の座標のどちらかが PX-10~PX+10とPY-10~PY+10の条件を満たすものとして 抽出すればよい為、SQLを組み立てるのは難しくないですが、 (3)についてはどのようにSQLを組み立てればよいのかが わかりません。 ちなみに、範囲を四角形にしたのは、 SQLを簡素に、重くならないように考えてのことです。 円(点からの距離)のが簡単or速いということであれば その方法をご教授願いたいです。 ご回答、またはアドバイスをよろしくお願い致します。

  • MySQL
  • 回答数2
  • ありがとう数3

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

  • ベストアンサー
回答No.2

オーソドックスな方法として、座標変換だけで比較する方法があります。 できるだけ軽い処理方法を希望されているようで、確かに座標変換すれば処理が重くなるとは思うけど、線分からの距離を求める以外に適当な方法が私にはわからなかったので、参考までに回答させていただきます。 P(X,Y)の座標値を 線分(SX,SY)-(EX,EY)の開始点を原点とし、終了点をu軸にとる u-v座標系に座標変換します。 線分の長さをL=SQRT((EX-SX)^2+(EY-SY)^2)とすれば、 これは、線分の終点のu座標値に他ならないので、 P点の座標変換した座標(u,v)について、 0<u<Lで、かつ vの絶対値(線分までの距離)が一定値以下のものを選択すれば 良いと思います。 座標変換の公式はここに書くと長くなりますので、ご存知でなければ別に調べてください。 比較する線分のテーブルに座標変換したu、vと線分長Lのカラムを作り、それから上記の条件で抽出するSQLを作れば良いのかな?

gotosyu510
質問者

お礼

回答ありがとうございます。 この方法ではP点を線分毎に座標変換することに なりますよね? 線分は今のところの想定で10万レコード程に なるため、一つ一つの線分に対してP点の 座標変換を行うとご指摘の通り重くなってしまうのでは ないでしょうか。 まずこの方法でどのくらい時間がかかるのか検証してみようと 思います。

その他の回答 (1)

回答No.1

こんばんは。 うーん・・・、 BETWEENじゃないのかな? 例えば・・・、 テーブル START INT 3 END INT 25 とかってなってた場合(START、ENDはカラムね) 条件8が範囲内かどうかなら、 select 'X' from table where 8(これ、検索条件) between START and END なんちゃって・・・。 上手く使えばできそうな・・・。

gotosyu510
質問者

お礼

回答ありがとうございます。 X軸のみ(つまり大小比較のみ)であれば その方法でもできそうですが・・・・ もうすこし考えてみます。

関連するQ&A

  • 2つの線分に垂直な線分の交点

    2次元平面に点P(x0,y0)、点A(x1,y1)、点B(x2,y2)があり、 点Aを通る線分PAに垂直な線分と 点Bを通る線分PBに垂直な線分の交点の 求め方を教えて下さい。 垂直ベクトルを求め、任意に座標を決めて 連立方程式を解くやり方だと上手くいかない時が あります。シンプルに求める方法がありましたら 教えて下さい。

  • 点が線分上にある条件について

    数学がとても苦手なのです。基本的な問題で申し訳ありません。 同一平面上で、ある点P(PX,PY)が、点A(AX,AY),点B(BX,BY)を結んだ線分AB上に存在する場合、点Pの座標が満たすべき条件を教えてください。 なんとなくは分かるのですが、シンプルに考えることができず、頭の中がごちゃごちゃになってしまいます。

  • 面と線分のなす角度

    以前質問させていただいたことに追加でわからない点が出てきましたので質問させていただきます。 xyz座標系で(0,0,1)(0,1,0)(1,0,0)の3点を通る面があります。また、(x1,y1,z1)(x2,y2,z2)の2点を両端とした線分があります。面に対しても線分がどれだけ傾いているか(線と面のなす角θ)はどのようにしたら求められますでしょうか?例えば(2,2,2)(3,3,3)を通る線分を考えて、面に対して平行移動してみようと思うのですが、そのやり方がよくわからないのです。よろしくお願いいたします。

  • 円と線分の共有点

    点P(x1, y1)と点Q(x2, y2)を通る直線と、中心のx座標、y座標、半径が分かっている円Oとの共有点を調べることは簡単ですが、線分PQと円Oの共有点を、図を描かずに計算で調べることは出来ますか? よろしくお願いします。

  • 教えてください。二次関数の線分比の問題です。

    中学3年生の二次関数の問題です。どなたか教えていただけないでしょうか。 2点A,Bはy=x2のグラフ上の点であり,点Cはy=1/4x2のグラフ上の点である。線分ACがx軸に平行であり,線分BCがy軸に平行であり,2点A,BのX座標は正である。AC:BC=1:9であるとき,点Aの座標を求めなさい。 http://www.fdtext.com/dat/chu/m3b/pb1.pdf 【問題40】です。 どうぞよろしくお願いします。

  • 線分と楕円が交差する条件

    同じカテゴリに度々すみません。 線分と楕円の交差する条件判定も 必要になってしまいました。(最後です) 楕円のデータとしては矩形でもっていて (px1,py1)-(px2,py2)の長方形の中に収まる楕円です。 その値を(cx - x)^2 / a + (cy - y)^2 / b = 1 へ変換し http://oshiete1.goo.ne.jp/kotaeru.php3?q=673382 の回答を参考にして内部に線分の端点がある場合の判定はできました。 しかし先端の間に楕円がきた場合はお手上げ状態です。 線分と楕円が交差する条件についてご教授ください。

  • 円を切り取った線分の長さ

    座標平面上で円(x-1)^2+(y-3)^2=25が直線2x-y+k=0から切り取る線分の長さが4√5であるとき定数kの値を求めよ ご教授お願いします

  • 座標を結んだ線分の交差

    配列 x, y に(実数)値が与えられており、 (x[1], y[1]) を座標平面上の点 P1 、(x[2], y[2]) を点 P2 、… と考えたとき、 P1とP2を結んだ線分と、P3とP4を結んだ線分が交差しているかを判断する プログラム(アルゴリズム)はどのように考えることができるでしょうか? 結ぶ2点を通る直線の傾きなどを求めても、どのように利用すればよいか思いつきませんでした。 C言語というより数学の話かもしれませんが、ご教示いただければ幸いです。 なかなか方法を思いつかず、私の考察を提示できずに恐縮ですが宜しくお願いいたします。

  • 2線分の最短距離。

    X、Y座標系で2線分の最短距離を測りたいのですが、お互いの端点から相手線分へ下ろした垂線の長さが最小となるものでよいのでしょうか?

  • 2点間を通り半径rの中心座標を求めるには

    はじめまして。 数学が苦手でなんとか克服していきたいと考えています。 早速ですが、2点間を通り半径rの中心座標を求める方法についてお聞きしたいです。 他サイト等で上記の求め方を検索し、連立方程式を用いて解く方法を見つけました。 始点(Sx,Sy) 終点(Ex,Ey) 半径r 中心座標(Px,Py) (Px - Sx)^2 + (Py - Sy)^2 = r^2 (Px - Ex)^2 + (Py - Ey)^2 = r^2 √を使用して上記の式を展開していきますが、途中で混乱してしまいます。 すみませんが、上記の中心座標を求めるための展開式を教えて頂けませんか? 以下に条件を記載しました。 始点(Sx,Sy) 終点(Ex,Ey) 半径rとして、中心座標(Px,Py)を求める展開式のご教授をよろしくお願い致します。