宿題が全く分からないので教えてください

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

宿題が全く分からないので教えてください

#1

投稿記事 by Gen » 13年前

必須課題1:以下の3つの変換行列を計算するプログラムを作成せよ.

ウィンドウの幅と高さから,ビューポート変換行列を求める
レンズの焦点距離から,透視変換行列を求める
X 軸まわりの回転角と平行移動量から,モデルビュー変換行列を求める

必須課題2:3次元空間中で定義された直線を2次元空間へ変換して描画し,これにより立体的な物体(円柱,球,グラフなど何でもよい)を描画するプログラムを作成せよ
必須課題1で作成した関数と,前回の演習で作成した自前の直線描画プログラムを組み合わせよ
前回の課題が出来ていない人は,前回のサンプルプログラムを元にしてもよい.

という宿題なんですが全く分かりません。教えてください。


前回の演習で作成した自前の直線描画プログラム

#include <stdio.h>
#include <GL/glut.h>
#include <stdlib.h>

#define IMG_X 500
#define IMG_Y 500

unsigned char image[IMG_Y][IMG_X][3];

void swap(int *nx, int *ny)
{
int temp = *nx;
*nx = *ny;
*ny = temp;
}

void clearImage(void) {
int x, y;

for(y = 0; y < IMG_Y; y++) {
for(x = 0; x < IMG_X; x++) {
image[y][x][0] = 0;
image[y][x][1] = 0;
image[y][x][2] = 0;
}
}
}

void drawLine(int xs, int ys, int xe, int ye) {
int x, y ;
double z, dx, dy, sum;

if(xs > xe){
swap(&xs,&xe);
swap(&ys,&ye);
}

dx = xe - xs;
dy = ye - ys;

z=dy/dx;
if(z>0){
if(z<1){
y = ys;
sum = dx / 2;
for(x = xs; x <= xe; x++) {
image[y][x][0] = 255;
image[y][x][1] = 255;
image[y][x][2] = 255;
sum += dy;
if(sum >= dx) {
sum -= dx;
y++;
}
}
}else{
x = xs;
sum = dy / 2;
for(y = ys; y <= ye; y++) {
image[y][x][0] = 255;
image[y][x][1] = 255;
image[y][x][2] = 255;
sum += dx;
if(sum >= dy) {
sum -= dy;
x++;
}
}
}
}else{
if(z>-1){
y = ys;
sum = dx / 2;
for(x = xs; x <= xe; x++) {
image[y][x][0] = 255;
image[y][x][1] = 255;
image[y][x][2] = 255;
sum -= dy;
if(sum >= dx) {
sum -= dx;
y--;
}
}
}else{
x = xs;
sum = dy / 2;
for(y = ys; y <= ye; y++) {
image[y][x][0] = 255;
image[y][x][1] = 255;
image[y][x][2] = 255;
sum -= dx;
if(sum >= dy) {
sum -= dy;
x--;
}
}
}
}
}

void display(void) {
clearImage();
drawLine(400, 100, 100, 200);
drawLine(400, 250, 100, 150);
drawLine(100, 100, 200, 500);

glRasterPos2i(-1, 1);
glPixelZoom(1, -1);
glDrawPixels(IMG_X, IMG_Y, GL_RGB, GL_UNSIGNED_BYTE, image);

glutSwapBuffers();
}

int main(int argc, char *argv[]) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
glutInitWindowSize(IMG_X, IMG_Y);
glutCreateWindow(argv[0]);
glutDisplayFunc(display);

glutMainLoop();
return 0;
}


必須課題1のプログラム

#include <stdio.h>
#include <GL/glut.h>
#include <stdlib.h>

#define IMG_X 500
#define IMG_Y 500
#define IMG_Z 500
#define Focus 10

double viewport[3][3]={{IMG_X/2,0,IMG_Y/2},
{0,-IMG_Y/2,IMG_X/2},
{0,0,1}};

double toushi[3][4]={{Focus,0,0,0},
{0,Focus,0,0},
{0,0,1,0}};



double modelview[4][4]={{1,0,0,0},
{0,0.5,0.866025405,0},
{0,-0.866025405,0.5,0},
{0,0,0,1}};


double martrix[3][4];
double martrix2[3][4];

void add(){
int i,j,k;

for (i=0;i<3;i++){
for (j=0;j<4;j++){
martrix[j]=0;
for(k=0;k<4;k++){
martrix[j]+=toushi[k]*modelview[k][j];
}
}
}

for (i=0;i<3;i++){
for (j=0;j<4;j++){
martrix2[j]=0;
for(k=0;k<3;k++){
martrix2[j]+=viewport[k]*martrix[k][j];
}
}
}
}


よろしくお願いします。

アバター
クローバ
記事: 12
登録日時: 13年前
住所: 東京23区内

Re: 宿題が全く分からないので教えてください

#2

投稿記事 by クローバ » 13年前

誰も課題に答えてくれないからと入って、時間を開けて同じ内容を投稿するのはどうかと思いますが。
取りあえず、どちらか一つは消去しておいたほうがよいかと思います。

アバター
さかまき
記事: 92
登録日時: 13年前

Re: 宿題が全く分からないので教えてください

#3

投稿記事 by さかまき » 13年前

必須課題1がそこまで出来ているなら、
>前回の演習で作成した自前の直線描画プログラム
レベルのプログラムを書く事ができた貴殿なら

>全く分かりません。教えてください。
のレベルの訳がありません。もう少し頑張ってみましょう。

閉鎖

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