- ベストアンサー
C言語 配列で座標
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
もう少し数の小さい例で説明します。 以下のように配列を宣言したとします。 *************** //配列宣言 int a[3][4]; *************** この場合 int型の値を格納できる変数が3×4=12個 作られたと考えることができます。 配列の使い方は以下のようになります。 ********************* //配列の扱い方の例 a[0][0]=1; a[0][1]=234; a[0][2]=-123; a[0][3]=5; a[1][0]=a[0][2]; ・ ・ ・ ******************* つまり普通のint型の変数とそれぞれが同じ扱い方ができます。 どの様に使うかは様々です。 イメージとしては [0][1][2][3] [0] □ □ □ □ [1] □ □ □ □ [2] □ □ □ □ このようなint型の値が格納できる箱が用意されるような感じです。 ここからは主観ですが 配列で座標を扱うといった概念はあまりないように思います。 たくさんの座標を扱うのであれば便利かもしれません。 少数の座標を表現する方法ですが **************** //double型で座標を表現 double x = 0.5; double y = 3.1; **************** のように扱うといいかもしれません。 構造体を知っているのであれば それで記述するとまとまって見やすいかもしれません。
その他の回答 (4)
- yama5140
- ベストアンサー率54% (136/250)
(質問文を、「可能性として」読むと) >C言語で二次元の配列a[11][11]を考えたとき、a[1][0]はxy座標の(1,0)を、a[0][5]はxy座標の(0, 5)を表しているという風な考えはあっているのでしょうか? たとえば、11 × 11 ピクセルの図を処理、というのであれば・・。 その座標に、色データを代入するとか・・(「考え」には、ここが欠落?)。 -------------------------------------------------- (質問文を、「そのまま?」読むと) int a[11][11]; ここでの 11 は、「個数」です。 a[1][0] = 9; ここでの 0 や 1 は、配列の先頭からの「位置」(を示すもの)で、9 は「値」です。 配列は、小数で、配列の先頭からの「位置」を指定できません。 >C言語で、xy座標で( 0.5, 3.1 )などの 小数を表そう としたらどうしたら良いのでしょうか? X = 0.5; という「値」ですよね。 Y = 3.1; 配列を使うなら、 #define XXX 0 #define YYY 1 double dZahyo[ 200 ][ 2 ]; dZahyo[ 0 ][ XXX ] = 0.5; dZahyo[ 0 ][ YYY ] = 3.1; のような使い方をします。 No.4 さんが >構造体を知っているのであれば >それで記述するとまとまって見やすいかもしれません。 としています(私も推奨)。 typedef struct{ double dX; double dY; }POINT; POINT sWork[ 200 ]; 200「個」の座標確保 sWork[ 199 ].dX = 0.5; 200番目(「位置」)に座標「値」代入 sWork[ 199 ].dY = 3.1; のようになるかと・・。
- JaritenCat
- ベストアンサー率37% (122/322)
> また、C言語で、xy座標で(0.5, 3.1)などの小数を表そうとしたらどうしたら良いのでしょうか? a[0.5][3.1]とは書けませんので、整数になるよう10倍してa[5][31]とするか、発想を変えてn番目の点をx[n]とy[n]の2変数で管理するなどの工夫が必要かと思います。
- asuncion
- ベストアンサー率33% (2126/6288)
> a[0][5]はxy座標の(0, 5)を表しているという風な考え プログラムによります。 > xy座標で(0.5, 3.1)などの小数を表そうとしたら x座標の値とy座標の値をメンバーとする構造体を定義してみてはいかがでしょうか。
- ryuudou
- ベストアンサー率25% (24/94)
A[α][β]とすれば、α個の箱の一つ一つにβ個の箱がそれぞれ入っている、という考えの方が良いでしょうね。 二次元配列を平面座標のような図にしたければ、小学校で習った掛け算の九九表のイメージを持ってください。
関連するQ&A
- C言語の配列のコピーについて
C言語の配列のコピーについて int a[] = {1,2,3}; int b[3]; memcpy(b, a, sizeof(a)); は、分かるのですが、 int c[][3] = { {1,2,3}, {4,5,6}, {7,8,9}, {10,11,12} }; int d[4][3]; memcpy(d, c, sizeof(c)); の使い方は正しいのでしょうか? 1次元配列の場合は連続するメモリ?なのでmemcpyでOKだと思うのですが 2次元以上の配列の場合は、メモリが連続しているか知らないので 不安に思いました。 実際、C言語でのメモリの取り方など詳しく書かれている本などありますか? よく初心者向け本にメモリは箱という大雑把なイメージで取り挙げられているのですが、突っ込んだ書籍等も探しています。 玄人の方、難しく(^^教えてください。
- ベストアンサー
- C・C++・C#
- C言語で巨大配列を作るにはどうすれば良いのでしょうか?
C言語で巨大配列を作るにはどうすれば良いのでしょうか? テストで作ってみた配列を用いたプログラムが動かなかったので(コンパイルは正常)、なんでだろうと思って調べてみると、巨大な配列はcalloc関数等を用いて作る必要があると知りました。 しかし正直解説サイトを見てもよく意味が分かりませんでした…。 例えばA[1000][1000][1000]の様な配列は、どの様に作ればいいのでしょうか? A[x][y][z]みたいに表現して、Aを変えて同じ様な配列を8個ほど作りたいです。 初心者なので勉強不足かも知れませんが、どうぞ宜しくお願い致します。
- ベストアンサー
- C・C++・C#
- vrmlとc言語について
vrmlでの3次元データを読み込んでc言語で処理をするには どうしたらいいのでしょうか? あと、vrmlでの3次元物体の座標(x,y,z)をc言語で読み込んで 処理をすることは可能なのでしょうか?
- 締切済み
- C・C++・C#
- 【C言語を教えてください!】2次元配列について
【C言語を教えてください!】2次元配列について 2次元配列を用いて、コンソール画面(ターミナル)の中央付近に*を表示させるプログラムを作りたいのですがさっぱり分かりません。 画面の大きさは半角で横80 縦25です。 25は奇数ですので40×12に表示したいと思います。 2重ループでなら出来たのですが配列でのやり方がわかりません。 #include<stdio.h> main() { int i,j; for(i=0;i<25;i++){ for(j=0;j<80;j++){ if(i==12&j==39){ putchar('*'); }else{ putchar(' '); } } } return 0; } 回答お願いします!
- ベストアンサー
- C・C++・C#
- C言語のプログラミング 配列について
C言語の課題でわからないところがあって困ってます。ちなみに初心者です。 int i; //添え字 for(i=0;i<○;i+=16){ //○はデーター数 a[2*i]=b[i]; a[2*i+1]=b[i+1]; a[2*i+2]=b[i+2]; a[2*i+3]=b[i+3]; : a[2*i+15]=b[i+15]; a[2*i+16]=c[i]; a[2*i+17]=c[i+1]; a[2*i+18]=c[i+2]; a[2*i+19]=c[i+3]; : a[2*i+31]=b[i+15]; } という風な配列がありまして、これをすっきりまとめたいのですが どうもエラーか配列aにNULLばかりはいってしまって上手くいきません。 どうすればよいのか教えてください。よろしくお願いします。
- ベストアンサー
- C・C++・C#
- C言語の2次元配列 容量が大きすぎる場合の対処方法
私はC言語をもちいて2次元配列を作ろうとしています。 しかし、配列数が double c[10000][10000]; と大きいものにすると、エラーになってしまいます。 もちろん小さい double c[10][10]; のような配列では問題ありません。 malloc関数とかも調べたのですがなかなかいい文献が見つからずに 困っています。 どうかいいご意見があればよろしくお願いします。
- ベストアンサー
- C・C++・C#
- ビットマップ画像の座標を小数で扱う方法について。
ビットマップ画像の座標を小数で扱う方法について。 プログラムでビットマップ画像を扱っています。 現在、ビットマップ画像のRGBの値を2次元配列に格納しています。 そのため、例えば画像の白い部分の座標がどこかを知りたいときは、2次元配列の場所を辿り、整数値として座標を得ています。 これを整数値ではなく、少数値で扱うことは可能でしょうか? 配列で扱う以外に方法が思いつかないです;; よろしくお願いします。
- ベストアンサー
- C・C++・C#
- C言語の配列番号が"0"から始まる理由
C言語の配列番号は"0"から始まりますが "1"からではなく"0"から始める理由を教えてください。 例えば char a[5]; と宣言した場合 配列a[]は a[1], a[2], ・・・, a[5] ではなく、 a[0], a[1], ・・・, a[4] である理由を教えてください。
- ベストアンサー
- C・C++・C#