本帖最後由 lv100love 於 2013-3-21 03:26 PM 編輯
/*這裡是計算正五邊形之鏡射矩陣的領域*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define pi (4.0*atan(1.0)) //定義π
int main()
{
int m , n , i , k , j ; //設定基本變數
double mat_A[2][2] , mat_B[2][2] ; //設定兩個鏡射矩陣
double mat_Z[2][2] ; //設定一個輸出矩陣
double mat_R[2][2] ; //設定旋轉矩陣
double alpha , beta , theta , err ; //設定角度跟誤差
theta = pi * 2 / 5 ;
err = 0.0 ; //先設定誤差等於0
for ( k=1 ; k<6 ; k++ ){
alpha = k * theta ;
for ( j=1 ; j<6 ; j++ ){
beta = j * theta ;
mat_Z[0][0] = 0.0 ;
mat_Z[0][1] = 0.0 ;
mat_Z[1][0] = 0.0 ;
mat_Z[1][1] = 0.0 ;
mat_A[0][0] = cos( alpha ) ;
mat_A[0][1] = sin( alpha ) ;
mat_A[1][0] = sin( alpha ) ;
mat_A[1][1] = -cos( alpha ) ;
mat_B[0][0] = cos( beta ) ;
mat_B[0][1] = sin( beta ) ;
mat_B[1][0] = sin( beta ) ;
mat_B[1][1] = -cos( beta ) ;
mat_R[0][0] = cos( alpha - beta ) ;
mat_R[0][1] = -sin( alpha - beta ) ;
mat_R[1][0] = sin( alpha - beta ) ;
mat_R[1][1] = cos( alpha - beta ) ;
for ( m = 0 ; m < 2 ; m++ ){
for ( n = 0 ; n < 2 ; n++ ){
for ( i = 0 ; i < 2 ; i++ ){
mat_Z[m][n] = mat_Z[m][n] + mat_A[m]*mat_B[n] ;
}
err = err + fabs( mat_Z[m][n] - mat_R[m][n] ) ;
}}
PF("When k=%2d, j=%2d, error= %e\n\n" , k , j , err ) ;
PF("%15.7e \t %15.7e \n%15.7e \t %15.7e \n\n" ,
mat_Z[0][0] , mat_Z[0][1] , mat_Z[1][0] , mat_Z[1][1] ) ;
}}
system("PAUSE");
return 0 ;
}
... |