見たことのないエラーが発生する問題

このQ&Aのポイント
  • gccを使用してブロック崩しのプログラムを作成していますが、cygwinでコンパイルするとundefined reference toというエラーが発生します。
  • Linux環境では正常にコンパイルできますが、cygwin環境ではエラーが発生します。
  • どうすればエラーを解決できるでしょうか?
回答を見る
  • ベストアンサー

見たことのないエラー

gccを使い、ブロック崩しのプログラムを作っています。 Linuxの環境だと、コンパイルもうまくいくのですが、 cygwinでコンパイルしようとするとundefined reference toというエラーがたくさん出てきます。 助けてください。 ソースは以下の通りです。 #include <GL/glut.h> #include <stdlib.h> #include <stdio.h> double xx; double ballx,bally; int xv,yv; double bwidth, bheight; double bposx, bposy; double pposx, pposy; double pwidth,pheight; double by,bx; int i,j; int delblock[5][9]= {{0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}}; void timer(int value) { ballx=ballx+xv;// X方向 if((ballx>100)||(ballx<-100)) xv*=-1;//反転、枠にぶつかった時 xv = xv * (-1) bally=bally+yv;// Y方向 if(bally>100) yv*=-1;// 反転、枠にぶつかった時 if(bally<-130) yv*=-1;//exit(0); if((xx<ballx) && ((xx+pwidth)>ballx) && (bally>pposy) && (bally<(pposy+pheight))){ yv*=-1;//反転、打ち返した時 } for(j=0; j<5; j++){ for(i=0; i<9; i++){ if(delblock[j][i]==0){ if((ballx>=bposx+bx) && (ballx<=bposx+bwidth+bx) && (bally>=bposy+bheight+by)){ if(bally<=bposy+bheight+by){yv*=-1;delblock[j][i]=1;} } else if((ballx>=bposx+bx) && (ballx<=bposx+bwidth+bx) && (bally<=bposy+by)){ if(bally>=bposy+by){yv*=-1;delblock[j][i]=1;} } else if((bally>=bposy+by) && (bally<=bposy+bheight+by) && (ballx<=bposx+bx)){ if(ballx>=bposx+bx){xv*=-1;delblock[j][i]=1;} } else if((bally>=bposy+by) && (bally<=bposy+bheight+by) && (ballx>=bposx+bwidth+bx)){ if(ballx<=bposx+bwidth+bx){xv*=-1;delblock[j][i]=1;} } } bx=bx+21; } bx=0; by=by+11; } by=0; glutPostRedisplay(); glutTimerFunc(10 , timer , 0); } void display(void) { glClear(GL_COLOR_BUFFER_BIT); ////ボール//// glColor3d(1.0, 1.0, 1.0); glPointSize(10); glBegin(GL_POINTS); glVertex2f(ballx/100.0 , bally/100.0); glEnd(); ////打ち返す台//// glColor3d(0.2, 0.2, 0.8); glBegin(GL_POLYGON); glVertex2d((pposx+xx)/100, pposy/100); glVertex2d((pposx+xx)/100, (pposy+pheight)/100); glVertex2d((pposx+pwidth+xx)/100, (pposy+pheight)/100); glVertex2d((pposx+pwidth+xx)/100, pposy/100); glEnd(); ////ブロックを増やす//// /*for(i=0; i<9; i++){ glBegin(GL_POLYGON); glVertex2d((bposx+tx)/100, bposy/100); glVertex2d((bposx+tx)/100, (bposy+bheight)/100); glVertex2d((bposx+bwidth+tx)/100, (bposy+bheight)/100); glVertex2d((bposx+bwidth+tx)/100, bposy/100); glEnd(); tx=tx+21.0; }*/ //////////////////////// ////ブロックを増やす2//// for(j=0; j<5; j++){ for(i=0; i<9; i++){ if(delblock[j][i]==0){ glBegin(GL_POLYGON); glVertex2d((bposx+bx)/100, (bposy+by)/100); glVertex2d((bposx+bx)/100, (bposy+bheight+by)/100); glVertex2d((bposx+bwidth+bx)/100, (bposy+bheight+by)/100); glVertex2d((bposx+bwidth+bx)/100, (bposy+by)/100); glEnd(); } bx=bx+21; } bx=0; by=by+11; } by=0; //////////////////////// glutSwapBuffers(); glFlush(); } void key(unsigned char key , int x , int y) { if((key=='z')&&(xx>=-98)){ xx=xx-4; } if((key=='x')&&(xx<=78)){ xx=xx+4; } } int main(int argc, char *argv[]) { xx=0.0; ballx=30.0; bally=-50.0; xv=1; yv=1; bwidth=20.0; bheight=10.0; bposx=-95.0; bposy=-0.0; pwidth=20; pheight=5; pposx=0; pposy=-95; bx=0; by=0; glutInitWindowPosition(100, 100); glutInitWindowSize(640, 480); glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); glutCreateWindow(argv[0]); glutDisplayFunc(display); glutKeyboardFunc(key); glutTimerFunc(10 , timer , 0); glutMainLoop(); return 0; }

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

必要なライブラリを適宜指定してください.

関連するQ&A

  • 内定をもらった会社から課題がだされてしまいました。

    正直まったくもってソースコードをいじった事がありません。なのでわかる方いたらぜひ回答お願いします。 ロボットアームが自動的に動くようにしたいんですけどそのソースコードがわからなくてわかるかたいたら教えてください。 #include <stdlib.h> #include <math.h> #include <GL/glut.h> /* * 直方体を描く */ static void myBox(double x, double y, double z) { GLdouble vertex[][3] = { { -x, -y, -z }, { x, -y, -z }, { x, y, -z }, { -x, y, -z }, { -x, -y, z }, { x, -y, z }, { x, y, z }, { -x, y, z } }; const static int face[][4] = { { 0, 1, 2, 3 }, { 1, 5, 6, 2 }, { 5, 4, 7, 6 }, { 4, 0, 3, 7 }, { 4, 5, 1, 0 }, { 3, 2, 6, 7 } }; const static GLdouble normal[][3] = { { 0.0, 0.0,-1.0 }, { 1.0, 0.0, 0.0 }, { 0.0, 0.0, 1.0 }, {-1.0, 0.0, 0.0 }, { 0.0,-1.0, 0.0 }, { 0.0, 1.0, 0.0 } }; const static GLfloat red[] = { 0.8, 0.2, 0.2, 1.0 }; int i, j; /* 材質を設定する */ glMaterialfv(GL_FRONT, GL_DIFFUSE, red); glBegin(GL_QUADS); for (j = 0; j < 6; ++j) { glNormal3dv(normal[j]); for (i = 4; --i >= 0;) { glVertex3dv(vertex[face[j][i]]); } } glEnd(); } /* * 円柱を描く */ static void myCylinder(double radius, double height, int sides) { const static GLfloat yellow[] = { 0.8, 0.8, 0.2, 1.0 }; double step = 6.28318530717958647692 / (double)sides; int i = 0; /* 材質を設定する */ glMaterialfv(GL_FRONT, GL_DIFFUSE, yellow); /* 上面 */ glNormal3d(0.0, 1.0, 0.0); glBegin(GL_TRIANGLE_FAN); while (i < sides) { double t = step * (double)i++; glVertex3d(radius * sin(t), height, radius * cos(t)); } glEnd(); /* 底面 */ glNormal3d(0.0, -1.0, 0.0); glBegin(GL_TRIANGLE_FAN); while (--i >= 0) { double t = step * (double)i; glVertex3d(radius * sin(t), -height, radius * cos(t)); } glEnd(); /* 側面 */ glBegin(GL_QUAD_STRIP); while (i <= sides) { double t = step * (double)i++; double x = sin(t); double z = cos(t); glNormal3d(x, 0.0, z); glVertex3f(radius * x, height, radius * z); glVertex3f(radius * x, -height, radius * z); } glEnd(); } /* * 地面を描く */ static void myGround(double height) { const static GLfloat ground[][4] = { { 0.6, 0.6, 0.6, 1.0 }, { 0.3, 0.3, 0.3, 1.0 } }; int i, j; glBegin(GL_QUADS); glNormal3d(0.0, 1.0, 0.0); for (j = -5; j < 5; ++j) { for (i = -5; i < 5; ++i) { glMaterialfv(GL_FRONT, GL_DIFFUSE, ground[(i + j) & 1]); glVertex3d((GLdouble)i, height, (GLdouble)j); glVertex3d((GLdouble)i, height, (GLdouble)(j + 1)); glVertex3d((GLdouble)(i + 1), height, (GLdouble)(j + 1)); glVertex3d((GLdouble)(i + 1), height, (GLdouble)j); } } glEnd(); } /* * 画面表示 */ static void display(void) { const static GLfloat blue[] = { 0.2, 0.2, 0.8, 1.0 }; /* 球の色 */ const static GLfloat lightpos[] = { 3.0, 4.0, 5.0, 1.0 }; /* 光源の位置 */ /* 画面クリア */ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); /* モデルビュー変換行列の初期化 */ glLoadIdentity(); /* 光源の位置を設定 */ glLightfv(GL_LIGHT0, GL_POSITION, lightpos); /* 視点の移動(シーンの方を奥に移す)*/ glTranslated(0.0, 0.0, -10.0); /* シーンの描画 */ myGround(-2.0); /* 地面    */ glTranslated(0.0, -1.8, 0.0); myCylinder(1.0, 0.2, 16); /* 土台    */ glTranslated(0.0, 1.0, 0.0); myBox(0.3, 1.0, 0.3); /* 1番目の腕 */ glTranslated(0.0, 1.0, 0.0); glRotated(90.0, 1.0, 0.0, 0.0); myCylinder(0.4, 0.4, 16); /* 関節    */ glTranslated(0.0, 0.0, -1.0); myBox(0.3, 0.3, 1.0); /* 2番目の腕 */ glTranslated(0.0, 0.0, -1.0); glMaterialfv(GL_FRONT, GL_DIFFUSE, blue); glutSolidCube(0.9); /* ハンド   */ glFlush(); } static void resize(int w, int h) { /* ウィンドウ全体をビューポートにする */ glViewport(0, 0, w, h); /* 透視変換行列の指定 */ glMatrixMode(GL_PROJECTION); /* 透視変換行列の初期化 */ glLoadIdentity(); gluPerspective(30.0, (double)w / (double)h, 1.0, 100.0); /* モデルビュー変換行列の指定 */ glMatrixMode(GL_MODELVIEW); } static void keyboard(unsigned char key, int x, int y) { /* ESC か q をタイプしたら終了 */ if (key == '\033' || key == 'q') {

  • クイックソートの可視化プログラムを考えています

    いつもお世話になっております。 当方、理系の学部に在籍中の学生です。 OpenGLを用いてクイックソートを可視化するためのプログラムを考えております。 まず、ソーティングしたい整数配列の要素ひとつひとつを単色の四角形で表現し、数が大きいほど明るく、小さいほど暗くなるよう設定しました。 イメージとしては、Rキーを押す度にソーティングがワンステップずつ進み、徐々に綺麗なグラデーションが出来上がっていく様子を表示させたいのですが、ここが上手くいかず困っております。問題点をご指摘いただけるとありがたいです。 以下、ソースコードの一部となります。 /* ソートする配列 */ int nums[] = {94, 43, 59, 57, 23, 27, 25, 22, 55, 21, 44, 28, 65, 30, 75, 13, 23, 89, 84, 71, 45, 68, 28, 31, 75, 62, 70, 34, 87, 20, 96, 47, 80, 74, 81, 30, 22, 55, 11, 34, 85, 16, 71, 41, 28, 26, 25, 47, 14, 55}; int n = 50; int flag = 0; /* 表示コールバック関数の一部 */ void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLineWidth(5.0); for(int i = 0; i < n; i++) { glColor3f(0.0, 0.0, nums[i] * 0.01); glBegin(GL_POLYGON); glVertex2f(0.0, 0.0 + 0.5 * i); glVertex2f(2.0, 0.0 + 0.5 * i); glVertex2f(2.0, 0.5 + 0.5 * i); glVertex2f(0.0, 0.5 + 0.5 * i); glEnd(); } /* キーボードコールバック関数の一部 */ case 'r': flag = 1; break; case 'q': /* クイックソートする */ QSort(nums, 0, n - 1); break; /* クイックソートを行う */ void QSort(int x[], int left, int right) { int i, j; int pivot; i = left; /* ソートする配列の一番小さい要素の添字 */ j = right; /* ソートする配列の一番大きい要素の添字 */ pivot = x[(left + right) / 2]; /* 基準値を配列の中央付近にとる */ while (1) { /* 無限ループ */ while (x[i] < pivot) /* pivot より大きい値が */ i++; /* 出るまで i を増加させる */ while (pivot < x[j]) /* pivot より小さい値が */ j--; /* 出るまで j を減少させる */ if (i >= j) /* i >= j なら */ break; /* 無限ループから抜ける */ Swap(x, i, j); /* x[i] と x[j]を交換 */ while (flag == 0) glutPostRedisplay(); i++; /* 次のデータ */ j--; flag = 0; /* flag更新 */ } if (left < i - 1) /* 基準値の左に 2 以上要素があれば */ QSort(x, left, i - 1); /* 左の配列を Q ソートする */ if (j + 1 < right) /* 基準値の右に 2 以上要素があれば */ QSort(x, j + 1, right); /* 右の配列を Q ソートする */ } /* 配列の要素を交換する */ void Swap(int x[ ], int i, int j) { int temp; temp = x[i]; x[i] = x[j]; x[j] = temp; }

  • 配列のエラーに関して

    java言語を用いて,Householder変換を用いた固有値の数値計算に挑戦してみました.しかし,次のようなエラーが発生し上手くいきません.どなたかこの問題を解決するためにお力をかしていただけないでしょうか. ----------エラー内容-------------------------------------------------------------------------------- Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0 at Out.Mhouse(House.java:90) at House.main(House.java:10) ---------------------------------------------------------------------------------------------------- //Householder変換 public class House{ public static void main(String[] args){ double[][] A = new double[3][3]; int n = A.length; Out out = new Out(); for(int i = 0;i < n;i++){ for(int j = 0;j < n;j++){ if(j < n-1){ System.out.print(out.Mhouse(A)[i][j] + " "); }else if (j == n-1) System.out.println(out.Mhouse(A)[i][j]); }; }; }; }; class Out{ double[][] outpro(double[] x){ int n; n = x.length; double[][] A = new double[n][n]; for(int i = 0;i < n;i++ ){ for(int j = 0;j < n;j++){ A[i][j] = x[i] * x[j]; } } return A; }; double[][] Msca(double a,double[][] A){ int n = A.length; for(int i = 0;i < n; i++){ for(int j = 0;j < n;j++){ A[i][j] = a * A[i][j]; } } return A; }; double selfpro(double[] x){ double a = 0; int n = x.length; for(int i = 0;i < n; i++){ a = a + x[i] * x[i]; }; return a; }; double[] minus(double[] x, double[] y){ int n = x.length; double[] z = new double[n]; for(int i = 0;i < n;i++){ z[i] = x[i] - y[i]; }; return z; }; double[][] house_1(double[] x){ int n = x.length; double[][] A = new double[n][n]; for(int i=0;i < n;i++){ for(int j = 0;j < n;j++){ if(i == j){ A[i][j] = 1 - Msca(2/selfpro(x),outpro(x))[i][j]; }else{ A[i][j] = - Msca(2/selfpro(x),outpro(x))[i][j]; }; }; }; return A; }; double[][] house_2(double[] x){ double[][] z = new double[1][1]; z[1][1] = 1 - 2; return z; }; double[][] Mhouse(double[][] A){ int n = A.length; double[][] H = new double[n][n]; for(int i = 0;i < n;i++){ double[] x = new double[n-i]; double[] y = new double[n-i]; double[][][] L = new double[i][n-i][n-i]; for(int j = 0;j < n-i;j++){ x[j] = A[i][i+j]; if(j == 0){ y[j] = 1; }else{ y[j] = 0; }; x[j] = y[j] - x[j]; }; if(i < n-1){ L[i] = house_1(x); for(int k = 0;k < n-i;k++){ for(int l = 0;l < n-i;l++){ H[i+k][i+l] = L[i][k][l]; }; }; }else if(i == n-1){ L[i] = house_2(x); for(int k = 0;k < n-i;k++){ for(int l = 0;l < n-i;l++){ H[i+k][i+l] = L[i][k][l]; }; }; }; }; double[][] B = new double[n][n]; for(int i = 0;i < n;i++){ for(int j = 0;j < n;j++){ for(int k = 0;k < n;k++){ B[i][j] = H[i][k] * A[k][j]; }; }; }; return A; }; };

    • ベストアンサー
    • Java
  • 内定をもらった会社から課題を出されてしまいました。

    三角形の面を定義する配列trianlglepを作成して、立方体を三つの頂点ごとの三角形で色分けするやり方がわかる方がいたら回答お願いします。 プログラミング未経験者なのでよろしくお願いします。 #include <GL/glut.h> GLdouble vertex[][3] = { { 0.0, 0.0, 0.0 }, /* A */ { 1.0, 0.0, 0.0 }, /* B */ { 1.0, 1.0, 0.0 }, /* C */ { 0.0, 1.0, 0.0 }, /* D */ { 0.0, 0.0, 1.0 }, /* E */ { 1.0, 0.0, 1.0 }, /* F */ { 1.0, 1.0, 1.0 }, /* G */ { 0.0, 1.0, 1.0 } /* H */ }; int edge[][2] = { { 0, 1 }, /* ア (A-B) */ { 1, 2 }, /* イ (B-C) */ { 2, 3 }, /* ウ (C-D) */ { 3, 0 }, /* エ (D-A) */ { 4, 5 }, /* オ (E-F) */ { 5, 6 }, /* カ (F-G) */ { 6, 7 }, /* キ (G-H) */ { 7, 4 }, /* ク (H-E) */ { 0, 4 }, /* ケ (A-E) */ { 1, 5 }, /* コ (B-F) */ { 2, 6 }, /* サ (C-G) */ { 3, 7 } /* シ (D-H) */ }; int plane[][4] = { { 0, 1,2,3 }, /* 面0 (A-B-C-D) */ { 1, 5,6,2 }, /* 面1 (B-F=G-C) */ { 2, 6,7,3 }, /* 面2 (C-G-H-D) */ { 0,3,7,4 }, /* 面3 (A-D-H-E) */ { 1, 0,4,5 }, /* 面4 (B-A-E-F) */ { 4, 7,6,5 }, /* 面5 (E-H-G-F) */ }; void display(void) { int i; glClear(GL_COLOR_BUFFER_BIT); /* 図形の描画 */ //glColor3d(0.0, 0.0, 0.0); //glBegin(GL_LINES); glBegin(GL_QUADS); for (i = 0; i < 6; ++i) { switch (i) { case 0 : glColor3d(1.0, 0.0, 0.0); break; case 1 : glColor3d(0.0, 1.0, 0.0); break; case 2 : glColor3d(0.0, 0.0, 1.0); break; case 3 : glColor3d(1.0,1.0,0.0); break; case 4 : glColor3d(0.0, 1.0, 1.0); break; case 5 : glColor3d(1.0, 0.0, 1.0); break; case 6 : glColor3d(1.0, 0.5, 0.0); break; case 7 : glColor3d(0.0, 1.0, 0.5); break; case 8 : glColor3d(0.5, 0.0, 1.0); break; case 9 : glColor3d(1.0, 0.5, 0.5); break; case 10 : glColor3d(0.5, 1.0, 0.5); break; case 11 : glColor3d(0.5, 0.5, 1.0); break; default: glColor3d(0.0, 0.0, 0.0); break; } glVertex3dv(vertex[plane[i][0]]); glVertex3dv(vertex[plane[i][1]]); glVertex3dv(vertex[plane[i][2]]); glVertex3dv(vertex[plane[i][3]]); } glEnd(); glFlush(); } void resize(int w, int h) { glViewport(0, 0, w, h); glLoadIdentity(); // glOrtho(-2.0, 2.0, -2.0, 2.0, -2.0, 2.0); gluPerspective(30.0, (double)w / (double)h, 1.0, 100.0); //glTranslated(0.0, 0.0, -5.0); gluLookAt(3.0, 4.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);//課題はここを弄るだけ } void init(void) { glClearColor(1.0, 1.0, 1.0, 1.0); } int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA); glutCreateWindow(argv[0]); glutDisplayFunc(display); glutReshapeFunc(resize); init(); glutMainLoop(); return 0; }

  • CGプログラミングで前のポリゴンに隠れているポリゴンをレンダリングしない方法はありますか?

    CGのレンダリングの質問です。 カメラが座標(-10,0,0)から(0,0,0)を見ています。 そのときに3角形AとBがあり、それぞれの頂点が: A(0,0,0)(0,0,10)(0,10,0) B(2,0,0)(2,0,3)(2,3,0) となってBがAに隠れています。 簡単なOPENGLのプログラムでは: glBegin(GL_TRIANGLES); // draws triangle glVertex3f(0.0f, 0.0f, 0.0f); glVertex3f(0.0f, 0.0f, 10.0f); glVertex3f(0.0f, 10.0f, 0.0f); glEnd(); glBegin(GL_TRIANGLES); // draws triangle glVertex3f(1.0f, 0.0f, 0.0f); glVertex3f(1.0f, 0.0f, 5.0f); glVertex3f(1.0f, 5.0f, 0.0f); glEnd(); gluLookAt(-10.0,0.0,0.0, //Where should the camera locate 0.0,0.0,0.0,//Where to look at 0.0,0.0,1.0); //Which is up in CG ... となるのですが。 今回のようにポリゴンが2つで済む時にはすべてをレンダリングしてもなんともないのですが、私のプログラムでは複雑に配置されたポリゴンがたくさんある3D地図なので、どうしても後ろのポリゴンを書かなくてもよいように判定をしたいのです。 どなたかどのポリゴンが視覚に入るか判定できるアルゴリズムのようなものをご存知でしたらご教授いただけるでしょうか?

  • OpenGLについて質問があります。

    底から見上げているように立方体がみえるように実行したいんですけどここからどうしていいかわからなくてわかる方いたら教えてください。お願いします。 #include <GL/glut.h> GLdouble vertex[][3] = { { 0.0, 0.0, 0.0 }, /* A */ { 1.0, 0.0, 0.0 }, /* B */ { 1.0, 1.0, 0.0 }, /* C */ { 0.0, 1.0, 0.0 }, /* D */ { 0.0, 0.0, 1.0 }, /* E */ { 1.0, 0.0, 1.0 }, /* F */ { 1.0, 1.0, 1.0 }, /* G */ { 0.0, 1.0, 1.0 } /* H */ }; int edge[][2] = { { 0, 1 }, /* ア (A-B) */ { 1, 2 }, /* イ (B-C) */ { 2, 3 }, /* ウ (C-D) */ { 3, 0 }, /* エ (D-A) */ { 4, 5 }, /* オ (E-F) */ { 5, 6 }, /* カ (F-G) */ { 6, 7 }, /* キ (G-H) */ { 7, 4 }, /* ク (H-E) */ { 0, 4 }, /* ケ (A-E) */ { 1, 5 }, /* コ (B-F) */ { 2, 6 }, /* サ (C-G) */ { 3, 7 } /* シ (D-H) */ }; void display(void) { int i; glClear(GL_COLOR_BUFFER_BIT); /* 図形の描画 */ glColor3d(0.0, 0.0, 0.0); glBegin(GL_LINES); for (i = 0; i < 12; ++i) { glVertex3dv(vertex[edge[i][0]]); glVertex3dv(vertex[edge[i][1]]); } glEnd(); glFlush(); } void resize(int w, int h) { glViewport(0, 0, w, h); glLoadIdentity(); // glOrtho(-2.0, 2.0, -2.0, 2.0, -2.0, 2.0); gluPerspective(30.0, (double)w / (double)h, 1.0, 100.0); //glTranslated(0.0, 0.0, -5.0); gluLookAt(3.0, 4.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); } void init(void) { glClearColor(1.0, 1.0, 1.0, 1.0); } int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA); glutCreateWindow(argv[0]); glutDisplayFunc(display); glutReshapeFunc(resize); init(); glutMainLoop(); return 0; }

  • エラーがどこかわからない

    #include<stdio.h> #include<math.h> #define NUM 100000 int main(void){ int prime[NUM+1],i,j,Limit; for(i=2;i<=NUM;i++){ prime[i]=1; } Limit=(int)sqrt(NUM); for(i=2;i<=Limit;i++){ if(prime[i]==1){ for(j=2*i;j<=NUM;j+=i){ prime[j]=0; } } } for ( i=2;i<=NUM;i++) {  if (prime[i]){    printf("%d\n",i); } } }  これは100000未満の素数の総数を求めるプログラムなんですが、実行したらエラーが出てくるんです。何度も確認しても正しいはずなんですがエラー出てきて困っています。どこが間違っているでしょうか?

  • javaの配列でエラーが出ます。

    javaの配列でエラーが出ます。 先ほどもjavaの配列で質問させていただいたんですが、 また同じようなところでエラーが出ました。。。 マインスイーパーを作ろうとしているんですが、 周りにある爆弾の数を数えるところでエラーが出ます。 たびたび頼ってばかりで申し訳ありません。 一応自分なりに考えたのを以下に。。 爆弾があるというのはmine[][]==10であらわしています。 //フィールド int[][] mine=new int[9][9]; Random rnd=new Random(); //スレッド public void run(){ //爆弾生成 int yoko,tate; for(int i=0;i<=9;i++){ yoko=(rnd.nextInt()>>>1)%9; tate=(rnd.nextInt()>>>1)%9; if(mine[yoko][tate]!=10)mine[yoko][tate]=10; else i-- } kazugime(); }//本当はこの後に描画のループが続きます。 //数を代入するメソッド public void kazugime(){ int kazu=0; for(int i=0;i<=8;i++){ for(int j=0;j<=8;j++){ kazu=0; if(mine[i][j]!=10){ //上の段 if(i>=1&&j>=1){if(mine[i-1][j-1]==10)kazu++;} if(i>=1){if(mine[i-1][j]==10)kazu++;} if(i>=1&&j<=7){if(mine[i-1][j+1]==10)kazu++;} //真ん中の段 if(j>=1){if(mine[i][j-1]==10)kazu++;} if(j<=7){if(mine[i][j+1]==10)kazu++;} //下の段 if(i<=7&&j>=1){if(mine[i+1][j+1]==10)kazu++;} if(i<=7){if(mine[i+1][j]==10)kazu++;} if(i<=7&&j<=7){if(mine[i+1][j+1]==10)kazu++;} mine[i][j]=kazu; } } } エラーは Uncaught exception java/lang/ArrayIndexOutOfBoundsException です。 足らない部分があればご指摘お願いします。 どうかよろしくお願いします。

    • ベストアンサー
    • Java
  • ラグランジュの補間法のCプログラム

    昨日学校でラグランジュの補間法の問題をC言語のプログラムで解けという課題が出されました しかし、友達と相談してもよくわかりませんでした 課題は以下の問題です sin関数6点、(0.92+0.01x)、x=0,1,2,3,4,5を求めて、ラグランジュの方法でsin(0.923)を計算せよ ちなみに答えは、0.79742です 先生からサンプルのプログラムをもらいました 以下のサンプルプログラムを参考にして解いてくださいと言われたのですが、どうしても解けません すいませんが分かる方、よろしくお願いします #include <stdio.h> #include <math.h> #define N 6 //データ数 double x[N]={ 0.0,1.0,2.0,3.0,3.1,5.0}; //X座標 double y[N]={0.0,1.1,2.5,4.0,4.1,5.0}; //Y座標 double lagrange( double); int main() { double xx,yy; //補間計算 printf("XX\t\tYY\n"); for( xx=0.0; xx<=5.0; xx+=.2 ) { yy = lagrange( xx); printf("%8.2lf\t%8.2lf\n", xx, yy ); } return 0; } //補間サブルーチン double lagrange( double xx ) { double z[N]; double yy=0.0; int i,j; for( i=0; i<N; i++ ) { z[i] = 1.0; //係数計算 for( j=0; j<N; j++ ) if( i!=j ) z[i]*=(xx-x[j])/(x[i]-x[j]); //補間値計算 yy+=z[i]*y[i]; } return yy; } 上記はあくまでサンプルプログラムなので、中に入っている数値は適当です よろしくお願いします

  • お願いします。

    IT関係の会社に内定をもらったのですが課題を出されました。 正直プログラミングなんて一度もやった事がなくて困っています。 三角形の面を定義する配列trianlglepを作成して、立方体を三つの頂点ごとの三角形で色分けするのをわかる方がいたら教えてください。お願いします。 #include <GL/glut.h> GLdouble vertex[][3] = { { 0.0, 0.0, 0.0 }, /* A */ { 1.0, 0.0, 0.0 }, /* B */ { 1.0, 1.0, 0.0 }, /* C */ { 0.0, 1.0, 0.0 }, /* D */ { 0.0, 0.0, 1.0 }, /* E */ { 1.0, 0.0, 1.0 }, /* F */ { 1.0, 1.0, 1.0 }, /* G */ { 0.0, 1.0, 1.0 } /* H */ }; int edge[][2] = { { 0, 1 }, /* ア (A-B) */ { 1, 2 }, /* イ (B-C) */ { 2, 3 }, /* ウ (C-D) */ { 3, 0 }, /* エ (D-A) */ { 4, 5 }, /* オ (E-F) */ { 5, 6 }, /* カ (F-G) */ { 6, 7 }, /* キ (G-H) */ { 7, 4 }, /* ク (H-E) */ { 0, 4 }, /* ケ (A-E) */ { 1, 5 }, /* コ (B-F) */ { 2, 6 }, /* サ (C-G) */ { 3, 7 } /* シ (D-H) */ }; int plane[][4] = { { 0, 1,2,3 }, /* 面0 (A-B-C-D) */ { 1, 5,6,2 }, /* 面1 (B-F=G-C) */ { 2, 6,7,3 }, /* 面2 (C-G-H-D) */ { 0,3,7,4 }, /* 面3 (A-D-H-E) */ { 1, 0,4,5 }, /* 面4 (B-A-E-F) */ { 4, 7,6,5 }, /* 面5 (E-H-G-F) */ }; void display(void) { int i; glClear(GL_COLOR_BUFFER_BIT); /* 図形の描画 */ //glColor3d(0.0, 0.0, 0.0); //glBegin(GL_LINES); glBegin(GL_QUADS); for (i = 0; i < 6; ++i) { switch (i) { case 0 : glColor3d(1.0, 0.0, 0.0); break; case 1 : glColor3d(0.0, 1.0, 0.0); break; case 2 : glColor3d(0.0, 0.0, 1.0); break; case 3 : glColor3d(1.0,1.0,0.0); break; case 4 : glColor3d(0.0, 1.0, 1.0); break; case 5 : glColor3d(1.0, 0.0, 1.0); break; case 6 : glColor3d(1.0, 0.5, 0.0); break; case 7 : glColor3d(0.0, 1.0, 0.5); break; case 8 : glColor3d(0.5, 0.0, 1.0); break; case 9 : glColor3d(1.0, 0.5, 0.5); break; case 10 : glColor3d(0.5, 1.0, 0.5); break; case 11 : glColor3d(0.5, 0.5, 1.0); break; default: glColor3d(0.0, 0.0, 0.0); break; } glVertex3dv(vertex[plane[i][0]]); glVertex3dv(vertex[plane[i][1]]); glVertex3dv(vertex[plane[i][2]]); glVertex3dv(vertex[plane[i][3]]); } glEnd(); glFlush(); } void resize(int w, int h) { glViewport(0, 0, w, h); glLoadIdentity(); // glOrtho(-2.0, 2.0, -2.0, 2.0, -2.0, 2.0); gluPerspective(30.0, (double)w / (double)h, 1.0, 100.0); //glTranslated(0.0, 0.0, -5.0); gluLookAt(3.0, 4.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);//課題はここを弄るだけ } void init(void) { glClearColor(1.0, 1.0, 1.0, 1.0); } int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA); glutCreateWindow(argv[0]); glutDisplayFunc(display); glutReshapeFunc(resize); init(); glutMainLoop(); return 0; }