quinta-feira, 5 de novembro de 2009

Ângulo entre dois vetores em C ( cosseno )

cos (q) =  u.v / |u||v|
arccos(q) = ângulo procurado
Logo temos : cos .h:

#define MAX 100
double ang(double x1[MAX] , double x2[MAX] , int dimensao);

e cos.c :

#include
#include //gcc -lm cos.c -o cos
#include "cos.h"





#define MAX 100
#define PI 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303820


void main (){
    double x1[MAX],x2[MAX];
    double coss ;
    int dimensao,i;
    printf("Entre com a dimensao dos vetores\n");
    scanf("%d",&dimensao);
    printf("Dimensao = %d\n",dimensao);
    printf("Entre com as cordenadas de x1\n");
    for (i=0;i
        printf("%d esima coordenada ",i+1);
        scanf("%lf",&x1[i]);
    }
        printf("Entre com as cordenadas de x2\n");
    for (i=0;i
        printf("%d esima coordenada ",i+1);
        scanf("%lf",&x2[i]);
    }
    coss = ang(x1,x2,dimensao);
    printf ("Cosseno de x1 , x2 = %lf \n",coss);
    double param, result;
   param = coss;
   result = acos (param) * 180.0 / PI;
   printf ("The arc cosine of %lf is %lf degrees.\n", param, result );   
}

double ang(double x1[MAX] , double x2[MAX] , int dimensao){
    //cos (q) =  u.v / |u||v|
    double coss;
    double produto=0;
    double norma1=0 , norma2=0;   
    int i;
    //produto
    for (i=0;i< dimensao ;i++){
        produto += x1[i] * x2 [i];
    }

   
    //norma1
    for(i=0;i
    norma1 += x1[i] * x1[i];
    }
    norma1=sqrt(norma1);
   
    //norma2
    for(i=0;i
    norma2 += x2[i] * x2[i];
    }
    norma2=sqrt(norma2);
    //cosseno    
    coss= produto/(norma1*norma2);
    return (coss);
}

 Este código foi elaborado por Pedro Ernesto Scotton
, pode-se usar livremente , mas de os créditos para o autor ,
 viva o linux e o software livre .

Nenhum comentário:

Postar um comentário