• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Cプログラミングで困っています><)

Cプログラミングで困っています><

このQ&Aのポイント
  • 配列の要素を条件に基づいてグループ化する方法が分かりません。
  • x, y, zの座標値を持つ配列があり、条件を満たすグループを見つけたいです。
  • 求めたい情報は、グループの数と各グループの要素数です。

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

  • ベストアンサー
noname#208507
noname#208507
回答No.3

intやdoubleのような基本データ型の配列ではなく、構造体の配列にするとよいでしょう。下記のようにして。 typedef struct Sphere { int index; int status; int flag; double x; double y; double z; } Sphere; Sphere data[N]; i番目の球をdata[i]とすれば、あるグループを構成する i を数えれば、そのグループの球体数が分かります。 しかしグループ数を調べる方法、球体をグループ分けする方法については何とも言えません。もっとグループの定義をはっきりさせないと。例えば球体aとbの中心の距離が2、bとcの距離が2、aとcの距離が4のとき、a,b,cは同じ1つのグループでしょうか? それともaとb、bとcの2グループでしょうか。 それと細かいことですが、画像の配列の並びはx>y>zの順ではなくxの昇順に見えます。

その他の回答 (2)

  • ki073
  • ベストアンサー率77% (491/634)
回答No.2

質問の趣旨とはすこし離れますが、クラスタ分析法の考え方を使えば解決できるように思います。 参考 https://www1.doshisha.ac.jp/~mjin/R/28/28.html プログラムを自分で作るのが目的でなければそこで使われているRを使ってみてください。 重心法でできると思いますが、例にあげられているように離れたデータであれば、どの方法でもできると思います。

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.1

>座標の絶対値の差をdiff1,座標の絶対値差をdiff2と定義し, 本当にそうなっていますか? 現実には、「次の座標と今の座標との差」であって、 絶対値に関する記載はそのコードのどこにも見当たらないように見えます。 絶対値に関する記載は、例えば if ((-2 < diff1 && diff1 < 2) && (-2 < diff2 && diff2 < 2) ... 以下省略 こんな風になりませんか?abs()系の関数あるいはマクロを使ってもいいかもしれません。

関連するQ&A

専門家に質問してみよう