アプリ版:「スタンプのみでお礼する」機能のリリースについて

うまい方法が無く困っています。

X-Y平面上に複数の点があり、そのすべての点を挟むような形で
2本の平行な直線を引きたい。
ただし、
2本の直線の距離は最小となるようにする。
点と直線は重なっても良い。
点数は3点以上。
点と点の距離は同じではない。

適当な平行線を用意し、回転+幅の調整をすることによりでき
そうな感じですが、大変そうです。

最小二乗法のように式を求める方法はありますか?
参考になる文献、HPでもかまいません。
よろしくお願いします。

A 回答 (2件)

最小二乗法は参加させる必要がない点が入りますので考慮対象外ですね。



手順1)
任意に2点(仮にA、Bとする)を結ぶ直線に対して、A,B以外の全ての点が、直線上を含めた片側にだけ存在するような点A,Bの組を全てリストアップする。

手順2)
リストアップした点を全部使い、全て点を凸多角形になるように結ぶ。直線上に頂点を結ぶ辺上にある点は両端の頂点だけを残し、リストアップした頂点の点リストから除外する。(直線状に並ぶ間の点の排除)

手順3)
リストに残った凸多角形を構成する頂点{Pi|i=1~n}を結んで得られる、辺の集まり{Lj|j=1~n}を考える。各辺Xiについて、その辺上にない残りの頂点Pjについて、辺との距離が最大の距離Rjを求める。これを全ての辺Ljについて繰り返し{Rj}のリストを作る。

手順4)
{Rj|j=1~n}の中のD=Min{Rj|j=1~n}とその時のj=pと頂点Pqを求める。

手順5)
最初の平行線M1を辺Lpに重ねてとる。
もう一本の平行線M2をLpからRpの距離にある点Pq(Lpからもっとも距離の遠い点)を通り、M1に平行になるように引く。

これでよいかどうか、色々なケースで検証してみてください。
正解と行かなくてもかなりいいとこまで行っていると思います。しかし正解かどうかは保証できません。
だめな場合は検証結果を書いて補足ください。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

回答の内容でうまくできそうな感じです。
ただ、検証には少し時間が掛かりそうなので、一度質問を締め切りたいと思います。
うまくいかない場合は、検証結果とともに再度質問させていただきます。

ありがとうございました。

お礼日時:2007/07/12 12:50

2点間の距離が最大の点を見つけて、A,Bとする



その2点を通り、その2点をむすぶ直線に垂直な平行線をつくり、どちらかの直線に一番近い点Cをみつける(A,Bは除く)

そして、AとBをそれぞれ通る平行線の式で、点Cに近い線が、点Cを通るように傾きを決めれば、いいような気がする。
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。
残念ながら、実際に図を書いて試したところ、平行な2本の直線
の距離は最小にはなりませんでした。

しかし、「2点間の距離が最大の点を結ぶ」ということには思い
つきませんでした。
視点を変えて、考えてみます。

お礼日時:2007/07/11 15:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!