- ベストアンサー
Cプログラミングで困っています><
- 配列の要素を条件に基づいてグループ化する方法が分かりません。
- x, y, zの座標値を持つ配列があり、条件を満たすグループを見つけたいです。
- 求めたい情報は、グループの数と各グループの要素数です。
- みんなの回答 (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)
質問の趣旨とはすこし離れますが、クラスタ分析法の考え方を使えば解決できるように思います。 参考 https://www1.doshisha.ac.jp/~mjin/R/28/28.html プログラムを自分で作るのが目的でなければそこで使われているRを使ってみてください。 重心法でできると思いますが、例にあげられているように離れたデータであれば、どの方法でもできると思います。
- asuncion
- ベストアンサー率33% (2127/6289)
>座標の絶対値の差をdiff1,座標の絶対値差をdiff2と定義し, 本当にそうなっていますか? 現実には、「次の座標と今の座標との差」であって、 絶対値に関する記載はそのコードのどこにも見当たらないように見えます。 絶対値に関する記載は、例えば if ((-2 < diff1 && diff1 < 2) && (-2 < diff2 && diff2 < 2) ... 以下省略 こんな風になりませんか?abs()系の関数あるいはマクロを使ってもいいかもしれません。