Witam! Dlaczego poniższy kod zawsze daje w wyniku same jedynki? Kiedy zamiast macierzy O podstawię inną o tych samych wymiarach i liczbach całkowitych, wynik jest poprawny.
void obrot( double( * P )[ 3 ], double( * O )[ 3 ], double( * W )[ 3 ] ) {
int i, j, k, tmp, w1, kl;
w1 = 1;
kl = 3;
for( i = 0; i < w1; i++ )
for( j = 0; j < kl; j++ )
{
tmp = 0;
for( k = 0; k < kl; k++ )
tmp +=( P[ i ][ k ] * O[ k ][ j ] );
W[ i ][ j ] = tmp;
}
}
int main( void ) {
double P[ 1 ][ 3 ] = { 3, 2, 1 };
double sincos =( sqrt( 2 ) / 2 );
double arcsin =( - sqrt( 2 ) / 2 );
double s =(( 2 - sqrt( 2 ) ) + sincos );
double z =(( 1 - sqrt( 2 ) ) - sincos );
double O[ 3 ][ 3 ] = { { sincos, sincos, 0 }, { arcsin, sincos, 0 }, { s, z, 1 } };
double W[ 1 ][ 3 ];
int i, j;
printf( "sincos: %f \n", sincos );
printf( "arcsin: %f \n", arcsin );
printf( "Tab: \n" );
obrot( P, O, W );
for( i = 0; i < 1; i++ ) {
for( j = 0; j < 3; j++ )
printf( "%f ", W[ i ][ j ] );
printf( "\n" );
}
return 0;
}