四角形を描き、X,Y方向にそれぞれ分割し、分割した辺に左下から反時計回りに番号をつけ、その辺の両端のx,yデータを書き出すというアルゴリズムを考えています。
1つの四角形ならうまくデータが取れるようになったのですが、四角形がX,Y方向に重なった時に、問題が発生してしまいます。
例えば、最初の四角形をx,y共に2分割すると辺の数は全部で8個になり上辺の番号は5,6ということになります。次にy方向に同じ形状の四角形を増やした時に、1,2(7,8)は6,5と重なるので、若い番号に書き換えます(6=7,8=5)。その次は9から始まるのではなく、書き換えた事により使っていない番号、7から書き出したいのですが、どなたか詳しい方、回答の方よろしくお願いします。
_______________________
| 5 | 11 |
| | |
|6 4|12 10|
| | |
|____3_____|____ 9____|
| 3 | 9 |
| | |
|4 2|2 8|
| | |
|____1_____|____7_____|
for(p=0;p<souyouso1-1;p++){
for(n=p+1;n<souyouso1;n++){
if((data[n][x1]==data[p][x2])&&(data[n][y1]==data[p][y2])
&&(data[n][x2]==data[p][x1])&&(data[n][y2]==data[p][y1])){
data[n][0]=data[p][0];
break;
}
}
}
No.2ベストアンサー
- 回答日時:
これでどうかな
//※以下、N は線分の総数
#define no 0
#define INVALID -1//無効値
int count;//通し番号(線分につける番号)
int s, t;
//各線分に割り振られている通し番号を「無効値」で初期化
for(t=0;t<N;t++){
data[t][no] = INVALID;
}
count = 0;//通し番号を初期化
/*以下の2重ループにおいて、
外ループで基準線分data[t][]を決定し、
そのそれぞれに対して
内ループで副線分data[s][]を決定し、
かつ基準線分と副線分を比較する。
*/
for(t=0;t<N;t++){//←tの範囲に注意
//基準線分の通し番号が既に決定してるなら、
//以後の処理を行わずループ先頭に返る
if (data[t][no] != INVALID) {
continue;
}
//基準線分に対し、「(正しい)通し番号」を割り振る
data[t][no] = ++count;
//内側ループ(副線分処理)
for(s=t+1;s<N;s++){
if (data[s][no] != INVALID) {
continue;
}
//もし基準線分と副線分が一致するなら
//副線分に対し通し番号を割り振る
if((data[s][x1]==data[t][x1])
&&(data[s][y1]==data[t][y1])
&&(data[s][x2]==data[t][x2])
&&(data[s][y2]==data[t][y2])){
//通し番号わりふり
data[s][no]=count;
//break;//←不要
}
}
}
No.1
- 回答日時:
どうされたいのかよくわからないのですが, 数字がとんでもいいのでとにかく
全ての辺に数字を割り振っておき, そのあとで割り振った数字を変更するという
方針ではダメでしょうか?
この回答への補足
早速の回答ありがとうございます。その方針で進めているのですが、変更を2回行う事になると思うんです。。。
例えば1~10まで最初に番号を振り、2と8,3と7のデータが同じだった場合、
1.2.3.4.5.6.3.2.9.10と並ぶと思いますが、
1.2.3.4.5.6.3.2.7.8と並べたいのです。
1回目の変更は上に書いてあるプログラムで、もし、同じデータが出てきた場合、前に使った番号(今回だと7=3,8=2)を使うように指示し、それはうまくいきました。
次に9の所をまだ使っていない番号7に置き換えそれ以降も8.9.10と振っていきたいのですが、それがうまくいきません。今の段階では、
上記の最初の方、
1.2.3.4.5.6.3.2.9.10となってしまうのです・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- その他(プログラミング・Web制作) Python - Excel で Webからデータを連続取得したいのですが エラーが出ます 1 2023/07/06 20:08
- その他(Microsoft Office) Excel 2列分のDATAの並べ替え 1 2023/01/01 17:12
- 英語 From the data mentioned that extracted from the cu 1 2023/01/25 19:55
- Excel(エクセル) 格納したデータを配列のように扱う方法はありますか? 8 2023/06/05 08:53
- C言語・C++・C# ある線が円の範囲に入っているかの計算 1 2022/12/07 16:14
- Java 動かなくなったのでJavaソースを手直しお願いします。 2 2022/04/30 05:35
- JavaScript 【jquery】EasyUIのSubGridにMySQLのテーブルデータを表示&編集にしたい 5 2022/05/02 13:10
- Visual Basic(VBA) vbaのループ処理について 6 2022/05/06 15:35
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ポインター引数の関数でコンパ...
-
printfの%eで指数部分の桁数を...
-
c言語の多次元配列で1から100ま...
-
CreateProcessでの環境変数の設...
-
ビットデータのチェック方法
-
【Excel VBA】10進数を2進数に...
-
CSVデータについての質問です。
-
linuxのシェルでファイル名に先...
-
C言語の構造体にてバブルソート...
-
VisualBasicでレジストリキーの...
-
オセロゲーム 2次元配列で困...
-
値によって組み分けを作成する...
-
'dataType' 引数を Null にする...
-
stable diffusionのエラー
-
C言語についてです! 同じ年の...
-
c言語での wavファイルの編集(...
-
C#でのswitch文
-
エクセルVBA:日付データの変換...
-
COBOLのCOMP形式について
-
10Mバイトて文字数に すると何...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
stable diffusionのエラー
-
ポインター引数の関数でコンパ...
-
printfの%eで指数部分の桁数を...
-
パイソン、データーサイエンス...
-
エクセルVBA:日付データの変換...
-
C#でのswitch文
-
int型(2バイト)データの分割
-
CreateProcessでの環境変数の設...
-
【Excel VBA】10進数を2進数に...
-
python 気象データの取得
-
テキストファイルの結合について
-
RegQueryValueExでの2バイト文字
-
linuxのシェルでファイル名に先...
-
'dataType' 引数を Null にする...
-
C言語についてです! 同じ年の...
-
オセロゲーム 2次元配列で困...
-
PINVOKEで構造体配列をマーシャ...
-
matlabのソースコードをpython...
-
C言語の勉強しています。すみま...
-
System.Collections.ArrayList ...
おすすめ情報