
四角形を描き、X,Y方向にそれぞれ分割し、分割した辺に左下から反時計回りに番号をつけ、その辺の両端のx,yデータを書き出すというアルゴリズムを考えています。
1つの四角形ならうまくデータが取れるようになったのですが、四角形がX,Y方向に重なった時に、重なった辺のデータがうまく取れません。例えば、最初の四角形をx,y共に2分割すると辺の数は全部で8個になり上辺の番号は5,6ということになります。次にy方向に同じ形状の四角形を増やした時に、1,2(7,8)は6,5と重なるので、若い番号に書き換えたい(6=7,7=5)ですが、どこに、どんなif構文なりをいれればいいのかが分かりません。コードを載せると800字を超えてしまうので、流れだけ書きます。
o=0;
so4=so4+so2;
p=adn;
for(v=1;v<ups1+1;v++)
{
for(u=1;u<ups2+1;u++)
{
for(r=0;r<su4;r++){
for(r=0;r<su4;r++){
p=0;
s=0;
data[o][p]=o+1;
data[o][p+1]=ups3;
data[o][p+2]=bu4*r+bu1*(v-1);
data[o][p+4]=bu5*s+bu2*(u-1);
data[o][p+5]=bu4*(r+1)+bu1*(v-1);
data[o][p+7]=bu5*s+bu2*(u-1);
o=o+1;
}
この後は4辺のデータを同じ風に書くです。
No.3ベストアンサー
- 回答日時:
>データが真逆になるので、同じと認識してくれない
認識して「くれない」!?
認識して「くれない」のではなく、
認識「させる」のだ。
---
「線分が同一かどうかの判定処理」についてのみ書く。
とにかく、「理屈」を理解し、
その理屈にのっとってソースコードを書こう。
---
四角形の"一周"を適当な数の"小片"に分割する。
小片とは、すなわち「線分」である。
線分とは、「始点と終点を持ったもの」にほかならない。
すなわち、小片を表現する(一意に決定する)には、
始点と終点のデータさえあればよい。
(ここ最重要ポイント)
したがって、
すべての四角形の、すべての小片のデータは、
次のような「4つの配列」で表せる。
int start_x[kSize];//始点のx座標
int start_y[kSize];//始点のy座標
int end_x[kSize];//終点のx座標
int end_y[kSize];//終点のy座標
(※kSize は存在するすべての小片の数)
---
じゃあ例えば、現在、xy平面上に、たった2つの線分があるとする。
1つは、始点(0, 0), 終点(1, 0)
もう1つは、始点(1, 0), 終点(0, 0)。
つまり2つの線分は始点と終点が逆になっている。
(本来、この2つの線分は等しい「はず」である)
では、この2つの線分を、
上記のデータ構造(「4つの配列」)に当てはめてみよう。
start_x = {0, 1}
start_y = {0, 0}
end_x = {1, 0}
end_y = {0, 0}
(kSize = 2)
これで、「xy平面上に存在する線分のすべて」が表された。
----
次に、この2つの線分が「等しいかどうか」を調べたい。
どのような処理を書けばよいだろうか?
パッと思いつくかな?
「線分として等しい」とは、どういうことだろう?
---
「線分として等しい」とは、すなわち、
「『始点同士が一致』し、かつ『終点同士が一致する』」
または
「『一方の始点と他方の終点が一致』し、
かつ『一方の終点と他方の始点が一致する』」
ことにほかならない。
(ここ重要ポイント)
具体的に書けば、
int i, sx1, sy1, ex1, ey1, sx2, sy2, ex2, ey2;
//線分1のデータ
sx1 = start_x[0];
sy1 = start_y[0];
ex1 = end_x[0];
ey1 = end_y[0];
//線分2のデータ
sx2 = start_x[1];
sy2 = start_y[1];
ex2 = end_x[1];
ey2 = end_y[1];
if ( (sx1 == sx2) && (sy1 == sy2)
&& (ex1 == ex2) && (ey1 == ey2) ){
printf("等しいです");
} else if ((sx1 == ex2) && (sy1 == ey2)
&& (ex1 == sx2) && (ey1 == sy2)) {
printf("等しいです");//向きは逆だが
} else {
printf("等しくありません");
}
No.2
- 回答日時:
#1です
>この文をもう少し詳しく書いていただけると
『重複を許さない配列(またはリスト)を作る』というのは、
たとえば、
次のような要素からなる配列(またはリスト)があるとする。
arr = {"りんご", "みかん", "なし", "りんご", "バナナ", "なし"}
この配列は、要素が重複している。
この配列を元にして、
新たに、以下のような「重複を許さない配列」を作るということ。
newArr = {"りんご", "みかん", "なし", "バナナ"}
または
newArr = {"りんご", "みかん", "なし", "バナナ", "", ""}
または
newArr = {"りんご", "みかん", "なし", "バナナ", -1, -1}
この回答への補足
今回の重複は、データが真逆になるので、同じと認識してくれないのです・・・。なるべく多くのソースコードを書いてみました。
float souyouso2;
float su4,su5; //x,yの分割数
float bu1,bu2,bu4,bu5; //距離
su4=ups4;
su5=ups5;
//ups1,2は四角の数。両方1の時はうまくいくが2になると辺のデータが重なる。
bu1=wide/ups1;
bu2=hight/ups2;
bu4=bu1/ups4;
bu5=bu2/ups5;
souyouso2=ups4*2+ups5*2;
//各寸法決定///////
int o,p,q,r,s,t,u,v;
ss3=0;
ss4=0;
BeginWaitCursor();
for(q=0;q<1;q++){
r=0;
domno[q][r]=ups1*ups2;
domno[q][r+1]=souyouso2*ups1*ups2;
so=domno[0][0];
}
for(s=0;s<so;s++){
t=0;
domdata[s][t]=souyouso2;
domdata[s][t+1]=0;
domdata[s][t+2]=0;
so2=domdata[s][0];
}
o=0;
so4=so4+so2;
p=adn;
for(v=1;v<ups1+1;v++)
{
for(u=1;u<ups2+1;u++)
{
for(r=0;r<su4;r++){
p=0;
s=0;
data[o][p]=o+1;
data[o][p+1]=ups3;
data[o][p+2]=bu4*r+bu1*(v-1);
data[o][p+4]=bu5*s+bu2*(u-1);
data[o][p+5]=bu4*(r+1)+bu1*(v-1);
data[o][p+7]=bu5*s+bu2*(u-1);
o=o+1;
}
for(s=0;s<su5;s++){
p=0;
r=su4;
data[o][p]=o+1;
data[o][p+1]=ups3;
data[o][p+2]=bu4*r+bu1*(v-1);
data[o][p+4]=bu5*s+bu2*(u-1);
data[o][p+5]=bu4*r+bu1*(v-1);
data[o][p+7]=bu5*(s+1)+bu2*(u-1);
o=o+1;
}
for(r=su4-1;r>-1;r--){
p=0;
s=su5;
data[o][p]=o+1;
data[o][p+1]=ups3;
data[o][p+2]=bu4*(r+1)+bu1*(v-1);
data[o][p+4]=bu5*s+bu2*(u-1);
data[o][p+5]=bu4*r+bu1*(v-1);
data[o][p+7]=bu5*s+bu2*(u-1);
o=o+1;
}
for(s=su5-1;s>-1;s--){
p=0;
r=0;
data[o][p]=o+1;
data[o][p+1]=ups3;
data[o][p+2]=bu4*r+bu1*(v-1);
data[o][p+4]=bu5*(s+1)+bu2*(u-1);
data[o][p+5]=bu4*r+bu1*(v-1);
data[o][p+7]=bu5*s+bu2*(u-1);
o=o+1;
}
}
}
こんな感じです四角形を2回分けるのがダメなのかなぁ。迷惑なのは分かってますが、本当に行き詰まってしまって困ってます。どうかよろしくお願いいたします。
No.1
- 回答日時:
考え方だけ書く。
<<まず前置き>>
四角形の「一周」を細かな小片に分ける。
たとえば、x軸方向の辺は各々 2分割、y軸方向の辺は各々 3分割するとすれば、
「一周」は
(2+3)×2=10
の小片に分けられる。
同様に一周を分割された四角形が N個 あるとすると、
小片の総数 allFrags は
allFrags = 10*N
となる。
<<前置きおわり>>
まず、すべての小片のデータ(※リストや配列)を作成する。
しかし、ここで作成されたデータの各要素は、互いに重複するものがあるかもしれない。
(※たとえば異なる2つの四角形の辺が重なっていた場合)
よって、このデータをもとにして、
今度は「要素の重複を許さない」小片データを新規に作る。
もし小片の番号を取得したい場合は、
その番号として、
新しいデータのインデクス値を採用すればよい。
この回答への補足
まず、すべての小片のデータ(※リストや配列)を作成する。->
ここまではdata[o][p]を書き出す事によって可能なんですが、
このデータをもとにして、
今度は「要素の重複を許さない」小片データを新規に作る。->
この文をもう少し詳しく書いていただけるとありがたいのですが・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- 数学 数学B 私の回答はあっていますか? A(1,3), B(2,5), C(6,8), D(5,6), 8 2022/05/22 00:55
- その他(プログラミング・Web制作) Python - Excel で Webからデータを連続取得したいのですが エラーが出ます 1 2023/07/06 20:08
- 工学 制御工学に関する質問です。 離散時間システムの状態方程式は x(k+1)=Ax(k)+Bu(k) と 1 2023/01/16 12:18
- 英語 From the data mentioned that extracted from the cu 1 2023/01/25 19:55
- 数学 正四面体を重ねてできる構造物とは? 2 2023/04/15 00:27
- 数学 『弧は弦より長し』 8 2022/04/18 10:23
- 数学 中2数学 証明 菱形や長方形の性質の証明で、平行四辺形の定理を使うことがありますが、その際は菱形は平 5 2023/02/16 16:14
- 数学 複素数平面についての問題です。 2点α、βが定められており、それらともう1点γと結ぶ三角形が直角二等 6 2023/06/30 09:47
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
vba フィルター 複数条件 3つ以...
-
エクセルでXY座標に並べられた...
-
VB6からの移行したいけど、VB.N...
-
C#でbyte配列から画像を表示さ...
-
VB6のメモリ解放に関して
-
C++で作成したDLLにVBAから配列...
-
配列の中の最大値とそのインデ...
-
構造体配列内の文字列検索のよ...
-
画像ファイルを配列に格納する方法
-
VBA フォルダ内のファイルを、...
-
構造体配列の特定のメンバーをF...
-
Dir関数で読み取り順を操作でき...
-
COBOLの基本的な事なので...
-
VB6で、一次元配列と二次元配列...
-
コンボボックスのインデックス...
-
C#,繰り返し処理での最大値の取...
-
VBScriptでCSVファイルを読み出...
-
VB.NETの配列にExcelから読み込...
-
ExcelVBAでデータを一括してセ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
vba フィルター 複数条件 3つ以...
-
エクセルでXY座標に並べられた...
-
C#でbyte配列から画像を表示さ...
-
Dir関数で読み取り順を操作でき...
-
配列の中の最大値とそのインデ...
-
配列のペースト出力結果の書式...
-
COBOLの基本的な事なので...
-
構造体配列の特定のメンバーをF...
-
構造体配列内の文字列検索のよ...
-
Redim とEraseの違いは?
-
レコードセットの中身を配列に...
-
VB6のメモリ解放に関して
-
定数配列の書き方
-
コンボボックスのインデックス...
-
OutOfMemoryExceptionの回避策...
-
Segmentation Fault (メモリ制限?)
-
VB.NETの配列にExcelから読み込...
-
VBAでMODE関数をつくる
-
DBから取得した値を配列へ代入する
おすすめ情報