paulo1205
(usa Ubuntu)
Enviado em 30/07/2014 - 20:21h
Sam L. escreveu:
Pois é, mas acontece que estou trabalhando com vetores bidimensionais e a função cos() nunca retorna negativo para qualquer valor do vetor. Eu me deparei com esse erro quando tentava calcular o ângulo de dois vetores unitários, a cos() sempre retornava um valor não negativo e não entendi como a sin retorna os valores normais.
Mas vou continuar a estudar o erro, talvez esteja fazendo um cálculo errado e não reparei nisso ainda.
Se você está tentando calcular o ângulo entre dois vetores
v1 e
v2, então provavelmente você deve estar trabalhando com o triângulo formado por esses dois vetores mais o terceiro vetor
v2-v1, e usando a lei dos cossenos, que enuncia
|v2-v1|²=|v1|²+|v2|²-2·|v1|·|v2|·cos(theta)
e que pode ser reduzida à forma
cos(theta)=v1·v2/(|v1|·|v2|)
(em outras palavras, o cosseno do ângulo
theta, que fica entre
v1 e
v2, é igual ao produto escalar entre esses vetores dividido pelo produto dos seus respectivos módulos).
A expressão acima lhe dá o valor do cosseno do ângulo
theta. Para chegar ao valor de
theta propriamente, você deve usar a função arco-cosseno. Na biblioteca do C, ela se chama
acos(), e recebe um argumento na faixa [-1; 1] (o contradomínio da função cosseno) e devolve um valor na faixa [0;
pi] (lembrando que a função cosseno é periódica e ímpar, i.e. cos(x)=cos(-x)).