質問: 平行な直線式の算出 うまい方法が無く困っています。 x-y平面上に複数の点があり、そのすべての点を挟むような形で 2本の平行な直線を引きたい。 ただし、 2本の直線の距離は最小となるようにする。 点と直線は重なっても良い。 点数は3点以上。 点と点の距離は同じではない。 適当な平行線を用意し、回転+幅の調整をすることによりでき そうな感じですが、大変そうです。 最小二乗法のように式を求める方法はありますか? 参考になる文献、hpでもかまいません。 よろしくお願いします。
回答: 最小二乗法は参加させる必要がない点が入りますので考慮対象外ですね。 手順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に平行になるように引く。 これでよいかどうか、色々なケースで検証してみてください。 正解と行かなくてもかなりいいとこまで行っていると思います。しかし正解かどうかは保証できません。 だめな場合は検証結果を書いて補足ください。