行列の回転を実行する際にに関数を立てて、同じようなことを何度も書かないようにしたいのですが、できるのでしょうか?
void(char a[ ][ ]){ }の関数をとることはできないのですが、どのような方法があるのか知りたいです。
行列の回転についての関数をたてる
Re: 行列の回転についての関数をたてる
やりたいことがよくわからないですが、C言語はチューリング完全なので、(実際はメモリの容量などの制約を受けますが)理論上チューリングマシンでできることは全てできるはずです。akasan さんが書きました:行列の回転を実行する際にに関数を立てて、同じようなことを何度も書かないようにしたいのですが、できるのでしょうか?
例えばvoid(int a[ ][ ]){ }の「関数をとる」とか…でしょうか?akasan さんが書きました:void(char a[ ][ ]){ }の関数をとることはできないのですが、どのような方法があるのか知りたいです。
もしくは、行列を1次元配列で表現して任意の大きさの行列(を操作するためのポインタ)を関数に渡せるようにするとか…?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 行列の回転についての関数をたてる
> 行列の回転を実行する際にに関数を立てて、同じようなことを何度も書かないようにしたいのですが、できるのでしょうか?
この説明では何をしたいのか判りません。
同じようなことを何度も書いているプログラムを載せてくれたら、改善点を指摘できるかもしれません。
この説明では何をしたいのか判りません。
同じようなことを何度も書いているプログラムを載せてくれたら、改善点を指摘できるかもしれません。
Re: 行列の回転についての関数をたてる
こんなことがしたいのでしょうか? C++ ではできませんが、C ではできます。akasan さんが書きました:void(char a[ ][ ]){ }の関数をとることはできないのですが、どのような方法があるのか知りたいです。
Re: 行列の回転についての関数をたてる
#include<stdio.h>
#define N 4
int main(void){
char a[N][N+1]={{"++++"},{"****"},{"++++"},{"****"}},b[N][N+1];
int i,j;
for(i=0;i<N;i++){
for(j=0;j<N;j++){
b[j][N-1-i]=a[j]; b[N]='\0';
}
}
for(i=0;i<N;i++)
puts(b);
}
このfor以下の部分を関数にできないのかなぁと思いまして、投稿してみました。
#define N 4
int main(void){
char a[N][N+1]={{"++++"},{"****"},{"++++"},{"****"}},b[N][N+1];
int i,j;
for(i=0;i<N;i++){
for(j=0;j<N;j++){
b[j][N-1-i]=a[j]; b[N]='\0';
}
}
for(i=0;i<N;i++)
puts(b);
}
このfor以下の部分を関数にできないのかなぁと思いまして、投稿してみました。
Re: 行列の回転についての関数をたてる
これではダメですか?akasan さんが書きました:このfor以下の部分を関数にできないのかなぁと思いまして、投稿してみました。
#include <stdio.h>
#define N 4
void f(int i, int j, char a[N][N+1], char b[N][N+1])
{
b[j][N - 1 - i] = a[i][j];
b[i][N] = '\0';
}
int main(void)
{
char a[N][N+1] = { "++++", "****", "++++", "****" },
b[N][N+1];
int i, j;
for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
f(i, j, a, b);
for (i = 0; i < N; i++)
puts(b[i]);
return 0;
}
Re: 行列の回転についての関数をたてる
回転行列というと、普通ゲームプログラムでは、3次元形状のモデルデータや、カメラ、ビュー行列などの
X,Y,Zの3次元座標の回転行列や線形代数で使う行列を表すと
個人的には考えています。
ただし、ゲームプログラムの回転する通常の行列と勘違いする行列といったら、転置行列か逆行列でしょうね。
ここではソースの提示は今すぐには出来ないですが、ネットで調べてみてはどうでしょうか?
もしかしたら、回転行列の意味が違うか、もしくは、一回の呼び出す関数で回転する角度が決まってしまったり違う関数なのか、
あるいは、複数回呼び出す事で回転する角度が同じや違う関数である可能性もありますが、ソースは
(ネット)で調べてください。自分はそれしか言えません。
X,Y,Zの3次元座標の回転行列や線形代数で使う行列を表すと
個人的には考えています。
ただし、ゲームプログラムの回転する通常の行列と勘違いする行列といったら、転置行列か逆行列でしょうね。
ここではソースの提示は今すぐには出来ないですが、ネットで調べてみてはどうでしょうか?
もしかしたら、回転行列の意味が違うか、もしくは、一回の呼び出す関数で回転する角度が決まってしまったり違う関数なのか、
あるいは、複数回呼び出す事で回転する角度が同じや違う関数である可能性もありますが、ソースは
(ネット)で調べてください。自分はそれしか言えません。