DELPHIコーディングの前で困っています

解決


yTake  2021-07-30 09:33:32  No: 149807

方程式が解けずに困っています。

ある同一平面上に互いに平行でない直線が複数あります。
また、同じ平面上の点P(xp,yp)を考えます。
この点から各直線へ垂線を引いた時の長さをdnとします。
例えば、直線が6本ある場合、d1,d2~d6となります。
この各直線までの距離の総和が最小となる点Pの座標を求めたいのですが、、、
各直線を、
a1*x+b1*y+c1=0
a2*x+b2*y+c2=0
  ・
  ・
a6*x+b6*y+c6=0
とすると、
各垂線の長さは、
d1=ABS(a1*xp+b1*yp+c1)/SQRT(a1^2+b1^2)
d2=ABS(a2*xp+b2*yp+c2)/SQRT(a2^2+b2^2)
  ・
  ・
d6=ABS(a6*xp+b6*yp+c6)/SQRT(a6^2+b6^2)
となります。
ここで、d1+d2+・・+d6を最小とする(xp,yp)を求めるわけですが、
絶対値や平方根があるので、コーディングし難いとも思い、各垂線の距離の時点で、両辺二乗する事を考えました。二乗してもその総和を最小とする点Pの座標は変わらないと思います。
すると、
d1^2=(a1*xp+b1*yp+c1)^2/(a1^2+b1^2)
d2^2=(a2*xp+b2*yp+c2)^2/(a2^2+b2^2)
  ・
  ・
d6^2=(a6*xp+b6*yp+c6)^2/(a6^2+b6^2)
となると思います。
そして、
d1^2+d2^2+・・+d6^2を最小とする(xp,yp)を求めまたいのですが、、、
ここから先に進めません。
解き方をご教示頂けると幸いです。
式の数が多いのも難ですが、直線の数は変動します。6より少ない場合もあり、多い場合もありますが、10を超えることはありません。
直線の数に応じて、解くやり方が一般的でしょうか?
最終的にDELPHI(XE6+FMX)でプログラムにします。

アドバイス頂けるでしょうか?


  2021-08-02 06:00:23  No: 149809

前提なのですが、2乗したとき、和の大小関係は不変でしょうか。
例えば、垂線の長さが4と23、1と25の2パターンがあるとします。16+529は545ですが、1+625は626で、大小関係は逆転します。
コーディングの前に、方程式を解く方法を整理した方が良いと思います。


yTake  2021-08-02 14:51:15  No: 149810

あさん
ありがとうございます。

ご指摘ありがとうございます。
なるほど、盲点でした。2乗しても大小関係は不変だと思い込んでいました。

場合分けが必要と思われますが、直線の数によっては、複雑になるので、さらにコーディングが難しくなりそうです。

与えられる直線は画像を走査して検知します。
画像上の点は有限なので、力技ですが、順次各点から実際に距離の総和を求めて、最短となる点を求める事も検討しています。
ただ、この方法だと方程式(不等式)を解いて得られる点と少々誤差が生じると思います。
大きな誤差とはならないと思いますが、与えられた画像の解像度程度の誤差は生じるでしょうか?


yTake  2021-08-07 16:24:23  No: 149814

実際に距離の総和を順次走査して最小となる座標を求める事としました。
誤差は含みとして許容させる方向としました。
ありがとうございました。


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加