散布図を作成したコードとグラフのデータを掲載してください。
だいたい直線状に並んだ点、A,B,Cがあるとします。A-B間は3cm、B-C間は4cm、A-C間は6cmの距離があるとします。
Aに一番近い点はB、Bに一番近い点はAなので、AとBを線を結ぶことになります。
では、CとBの間は線で結ぶべきなのでしょうか?
★Cから見て、Bは一番近い点です。だから、線で結ぶ。
☆Bから見て、Cは一番近い点ではないです(Bに一番近い点はA)。だから、線で結ばない。
ここで質問の想定が判らなくなりました。
coco_bauer さんの話と一緒ですが、質問の下の図に明らかに一番近い点が結ばれてないところがありますよね。
一番近い点を結ぶというよりも、「同一直線上にあると近似できる点群に分類すること」が問題の本質のような気がしました。
コメントありがとうございます。
大学の研究に必要で、簡単に言うと散布図の点が河川のある場所を表していて、jun68yktがおっしゃっているように河川のように線を引きたいです。
散布図の点は、"np.full((50,50),0)"で作成した配列に河川判定された座標を入れた"K"という配列のxとyを"plt.scatter(x, y)"でプロットした点で散布図を作成しました。
一番近い点同士というのは質問の意図とは違いました。
分かりづらくてすみません。
yonhark0さん
とても知的興味をそそられる問題だとは思います。でも簡単ではなさそうですね。
点が全部で100個あるとして、ある点Aに最も近い(A以外の)点Bを特定するのは、単純に考えれば、AとA以外の99個の各点との距離を全部計算して、一番、短い距離の点をBとすればよいです。次にBに最も近い点を算出するときには、Aを除外した98個の点から最も近い点を選ぶ、というアルゴリズムにすることも考えられます。(ただし、ある1個の点と一番近い点を特定する際に、他の99個との距離を全部出さなくもいいような何らかの最適化はできるのでは、と思います。そこは工夫のしどころですね)
ですが、疑問に思うのは、ある地点Aに川が流れていて、Aに最も近い地点Bに川が流れていることが分かっていても、AとBの間に川が流れているとは必ずしもいえないですよね? Aを流れる川とBを流れる川とが、AにもBにも近い点Cで合流する場合もあるでしょう。そのような場合に、グラフ上でAとBを結ぶと、実態を表さなくなりますね。
ただ、そういうケースはひとまず置いておいて、一番近い点どうしを結んでいけば、川の流れを表す図として、実態に当たらずとも遠からずなものになりそうという気はするので、ひとまずそれを表示させたい、というのはあるかもしれません。そういう問題設定でよいのでしょうか?
jun68yktさん
ありがとうございます。
工夫の仕方は色々あると思いますが、コメントしていただいたA店で他の99個の点を比較して、次にB点で98個の点を比較して・・・というイメージでとりあえず試行錯誤してみようと思います。
「AとBの間に川が流れているとは必ずしも言えないかも」という疑問については、標高データや勾配などの専門的な材料を用いているので心配ありません。
返答していただきとても助かりました!
どういたしまして。
ひとまず前に進められそうなら、何らか自己解決した旨をご自身で回答してそれをベストアンサーとし、このご質問は自己解決にするとよいでしょう。
それで
> ・・・というイメージでとりあえず試行錯誤
してみて、そのプログラムを完成させる上で課題や疑問が発生したら、作成途中のコードも添えて、あらたなご質問を投稿されるとよいでしょう。
あなたの回答
tips
プレビュー