Enrere Mòdul 2
Fonaments de Programació. Llenguatge C/C++---
Pràctica  Resum teòric Exercicis
Pràctica d'ampliació

 
Angle  de dos vectors

En aquesta pràctica es podrà comprovar com una funció pot cridar a una altra funció.

 

Desenvolupament de la pràctica

Creeu un nou arxiu del tipus C anomenat m2pa2.c. Escriviu el següent codi:

//m2pa2.c - Angle de dos vectors  -

#include <stdio.h>
#include <math.h>

double deg(double); //converteix radians a graus
double modul(double, double); //calcula el mòdul d'un vector
double pro_esc(double, double, double, double); //producte
                                                //escalar
double angle(double,double,double,double); //angle

int main(){

    double ux,uy;
    double vx,vy;

    printf("introduïu les coordenades d'u:\n");
    scanf("%lf %lf",&ux,&uy);

    printf("introduïu les coordenades de v:\n");
    scanf("%lf %lf",&vx,&vy);

    printf("l'angle que formen és %.2lf graus\n",
    angle(ux,uy,vx,vy));

    return 0;

}

 

double angle(double ux,double uy,double vx,double vy){

    double cosinus;

    cosinus = pro_esc(ux,uy,vx,vy)/modul(ux,uy)/modul(vx,vy);
    return deg(acos(cosinus));

}

 

double deg(double ang){

    const double PI=3.14159265358979;

    return ang*180/PI;

}

 

double modul(double x, double y){

    return sqrt(pro_esc(x,y,x,y));

}

 

double pro_esc(double ux, double uy, double vx, double vy){

    return ux*vx+uy*vy;

}

 

Captura de l'execució del programa.

 

 

Explicació del programa

Aquest programa permet calcular en graus sexagesimals l'angle que formen dos vectors del pla. Els dos vectors s'introdueixen mitjançant dues funcions scanf() i s'emmagatzemen en les variables ux,uy vx, vy, les dues primeres variables representaran el primer vector i les dues últimes el segon vector.

Segons les fórmules de geometria elemental del pla, el cosinus de l'angle que formen dos vectors ve donada per la fórmula:

on u·v representa el producte escalar dels vectors u i v, és a dir:

i representa el mòdul del vector u, és a dir:

Una vegada calculat el cosinus de l'angle, per tal de calcular l'angle es fa servir la funció de la llibreria estàndard acos() (arcosinus), aquesta funció accepta un argument del tipus double i retorna un valor, també del tipus double

El valor de retorn és l'angle expressat en radians. Per convertir-lo a graus sexagesimals s'ha de fer la següent conversió:

En aquest programa s'han creat quatre funcions: deg(), modul(), prod_esc() i angle().  La declaració d'aquestes funcions és la següent:

 
double deg(double); //converteix radians a graus
double modul(double, double); //calcula el mòdul d'un vector
double pro_esc(double, double, double, double); //producte
                                                //escalar
double angle(double,double,double,double); //angle

Totes accepten arguments del tipus double i retornen valors del tipus double.

L'angle que formen els vectors es calcula amb la funció angle(). Aquesta funció crida a la funció pro_esc(), la funció modul() i la funció deg().

A la vegada, la funció mòdul() crida també a la funció prod_esc().