glutを使ってランダムに円を表示したいが,x座標だけ固定されて困ってます

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
時間と後悔

glutを使ってランダムに円を表示したいが,x座標だけ固定されて困ってます

#1

投稿記事 by 時間と後悔 » 6年前

課題のゲーム作成のため円を初期の状態でランダムに表示するプログラムを作りたいのですがどうしてもx座標が一定になってしまいy座標だけランダムになるだけです.また,init関数のpos[0]とpos[1]の文を入れ替えてみるとy座標が固定されてしまい,その代りにx座標だけランダムになるので,そこらへんを教えていただきたいです.また範囲指定の仕方も教えていただけると嬉しいです.画面の外に表示される場合もあるので.

#define CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "glut.h "
#include<string.h>
#include<time.h>

double pos[2];
void drawCircle1(double pos_x, double pos_y, double radius, int startAngle, int endAngle, double color1, double color2, double color3){
int i;
glBegin(GL_POLYGON);
glColor3d(color1, color2, color3);
for(i = startAngle; i <= endAngle; i += 360.0 / 36){
glVertex2d(
pos_x + radius * cos (3.14 * i / 180),
pos_y + radius * sin (3.14 * i / 180)
);
}
glEnd();
}
void drawCircle2(double pos_x, double pos_y, double radius, int startAngle, int endAngle, double color1, double color2, double color3){
int i;
glBegin(GL_LINE_STRIP);
glColor3d(color1, color2, color3);
for(i = startAngle; i <= endAngle; i += 360.0 / 36){
glVertex2d(
pos_x + radius * cos (3.14 * i / 180),
pos_y + radius * sin (3.14 * i / 180)
);
}
glEnd();
}
void drawRect(double pos_a, double pos_b, double pos_c, double pos_d, double color1, double color2, double color3){
glBegin(GL_LINE_LOOP);
glColor3b(color1, color2, color3);
glVertex2d(pos_a, pos_b);
glVertex2d(pos_c, pos_d);
glEnd();
}

void drawBall(double posGiven[2]){
double size = 0.1;
drawCircle1(posGiven[0], posGiven[1], size * 1.0, 0, 360, 1.0, 1.0, 0.8);
drawCircle2(posGiven[0], posGiven[1], size * 1.0, 0, 360, 0.0, 0.0, 0.0);
}
void updatepos(void){
}

void display(void){

glClear(GL_COLOR_BUFFER_BIT);

drawBall(pos);
glFlush();
}
void init(void){
pos[0] = (double) rand () / RAND_MAX * 1.8 - 1.4;
pos[1] = (double) rand () / RAND_MAX * 1.8 - 1.0;

}

int main(int argc, char *argv[]){
srand((unsigned)time(NULL));
// GLUTライブラリをsh帰化
glutInit(&argc, argv);
// 表示モードを設定
glutInitDisplayMode(GLUT_RGBA);

// ウィンドウを生成
glutCreateWindow(argv[0]);

// 秒場を行う関数を指定
glutDisplayFunc(display);

// 初期化
init();

// メインループ
glutMainLoop();


return EXIT_SUCCESS;
}

アバター
usao
記事: 1569
登録日時: 6年前

Re: glutを使ってランダムに円を表示したいが,x座標だけ固定されて困ってます

#2

投稿記事 by usao » 6年前

>x座標が一定
値が一定というのをどうやって確認していますか?
init()の最後に
printf( "%lf, %lf\n", pos[0], pos[1] );
を入れてみると,実行毎に値が変化しています.

描画結果だけを見て 一定だとおっしゃっているのであれば
pos[0] = (double) rand () / RAND_MAX * 1.8 - 1.4;
では値の取り得る範囲が狭いので,そのように見えているだけではないでしょうか.


>また範囲指定の仕方も教えていただけると嬉しいです.画面の外に表示される場合もあるので.
ウィンドウ領域内に見える座標範囲は設定により変化します.
デフォルトの状態でそこらへんのことがどうなっているのか私は知りませんが,そのことの調べがつかないのであれば,
カメラやビューポートの設定を行って,ウィンドウに表示される座標範囲をご自身で把握できるようすればよいと思います.
・2次元的な表示をしたいだけであれば,glOrtho()を使うとわかりやすいかと思います.
・glutReshapeFunc()でコールバック関数を設定し,ウィンドウサイズを変更された場合への対策も必要かもしれません.
参考↓
http://www.wakayama-u.ac.jp/~tokoi/open ... lut.html#6

時間と後悔

Re: glutを使ってランダムに円を表示したいが,x座標だけ固定されて困ってます

#3

投稿記事 by 時間と後悔 » 6年前

usaoさん.ありがとうございます.
printfで見てみたところ値はとても近い値がでてほぼ一定な値でした.
また,RAND_MAXの後の値を変えてみても結果は一緒でした.

違うやり方で表示する方法に変えたので,また時間があるときにでも調べてみたいと思っています.
ありがとうございました.

閉鎖

“C言語何でも質問掲示板” へ戻る