大学でTurbo C++ 4.0の講義を受けています。その課題で困って
大学でTurbo C++ 4.0の講義を受けています。その課題で困っています。
問1 画面上に描かれた長方形がキー入力によって原点を中心に回転するアニメーションを実現するプログラムを作成せよ。キーの「1」と「3」で回転角度が増減するようにせよ。
問2 前問のプログラムの図形を画面の中心に平行移動をしてから表示するように改造せよ。結果として画面の中央(320, 240)を中心とした回転移動の角度をキー入力によって増減するようにせよ。
#include <graphics.h>
#include <stdio.h>
#include <conio.h>
#include <math.h> // SIN, COSを使うので必要
#define VN 4 // 頂点数
#define OX 10.0 // 長方形の左上頂点のX
#define OY 20.0 // 長方形の左上頂点のY
#define WIDTH 50.0 // 長方形の幅
#define HEIGHT 100.0 // 長方形の高さ
static double rect_data[VN][2] = { // 長方形頂点配列
{ OX, OY },
{ OX+WIDTH, OY },
{ OX+WIDTH, OY +HEIGHT},
{ OX, OY +HEIGHT}
};
int main()
{
int GraphDriver = DETECT, GraphMode;
int i, j, k,c,d=0;
double new_data[VN][2]; // 変換の結果を入れる配列
double matrix[2][2]; // 回転変換の行列
double theta = M_PI / 6.0; // 回転角度θ=π / 6
registerbgidriver(DOSVGA_driver); // 設定を読み込む
initgraph( &GraphDriver, &GraphMode, "") ; // 画面切替
while(1){
c=getch();
d=d+c;
if(c == '1'){
theta = M_PI / d;
matrix[0][0] = cos(theta);
matrix[0][1] = sin(theta);
matrix[1][0] = -sin(theta);
matrix[1][1] = cos(theta);
for (i = 0; i < VN; i++) { // すべての頂点について
for (j = 0; j < 2; j++) { // ここから行列のかけ算
new_data[i][j] = 0.0;
for (k = 0; k < 2; k++) {
new_data[i][j] += rect_data[i][k] * matrix[k][j];
}
}
} // これ以後は変換した長方形の表示
moveto((int)(new_data[VN-1][0]), (int)(new_data[VN-1][1]));
for (i = 0; i < VN; i++) {
lineto((int)(new_data[i][0]), (int)(new_data[i][1]));
}
cleardevice();
} else if (c == '3') {
theta = M_PI / (-d);