1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
#include "structures.h"
int fonction_collision(struct structure_objet_physique *Objet, struct Structure_geometrique_ligne Ligne)
{
//creation du vecteur représantant la ligne
struct Structure_geometrie_vecteur Vecteur_ligne;
Vecteur_ligne.x = 0;
Vecteur_ligne.y = 0;
fonction_coordonnees_vecteur(&Vecteur_ligne, Ligne.x[0], Ligne.y[0], Ligne.x[1], Ligne.y[1]);
//création du vecteur position par rapport a la ligne
struct Structure_geometrie_vecteur Vecteur_position_relative;
Vecteur_position_relative.x = 0;
Vecteur_position_relative.y = 0;
fonction_coordonnees_vecteur(&Vecteur_position_relative, Ligne.x[0], Ligne.y[0], (*Objet).Vecteur_position.x, (*Objet).Vecteur_position.y);
//calcul de la position suivante
struct Structure_geometrie_vecteur Vecteur_position_relative_suivante;
Vecteur_position_relative_suivante.x = 0;
Vecteur_position_relative_suivante.y = 0;
fonction_coordonnees_vecteur(&Vecteur_position_relative_suivante, Ligne.x[0], Ligne.y[0], (*Objet).Vecteur_position_suivante.x, (*Objet).Vecteur_position_suivante.y);
//calcul de la difference de position
struct Structure_geometrie_vecteur Vecteur_delta_position;
Vecteur_delta_position.x = 0;
Vecteur_delta_position.y = 0;
fonction_coordonnees_vecteur(&Vecteur_delta_position, (*Objet).Vecteur_position.x, (*Objet).Vecteur_position.y, (*Objet).Vecteur_position_suivante.x, (*Objet).Vecteur_position_suivante.y);
//calcul de l'angle entre les vecteurs
double angle_initial = fonction_angle_entre_vecteur(&Vecteur_ligne, &Vecteur_position_relative),
angle_final = fonction_angle_entre_vecteur(&Vecteur_ligne, &Vecteur_position_relative_suivante),
angle_delta_position = fonction_angle_entre_vecteur(&Vecteur_ligne, &Vecteur_delta_position);
if( ((angle_initial > 0 && angle_final < 0) || (angle_initial < 0 && angle_final > 0))
&& fonction_produit_scalaire(&Vecteur_ligne, &Vecteur_position_relative) > 0
&& fonction_produit_scalaire(&Vecteur_ligne, &Vecteur_position_relative) < fonction_norme_vecteur(&Vecteur_ligne) * fonction_norme_vecteur(&Vecteur_ligne))
{
(*Objet).Vecteur_position_initiale.x = (*Objet).Vecteur_position.x;
(*Objet).Vecteur_position_initiale.y = (*Objet).Vecteur_position.y;
(*Objet).Vecteur_vitesse_initiale.x = 0.7*(*Objet).Vecteur_vitesse.x;
(*Objet).Vecteur_vitesse_initiale.y = 0.7*(*Objet).Vecteur_vitesse.y;
fonction_rotation_vecteur(&((*Objet).Vecteur_vitesse_initiale), (-2*angle_delta_position));
(*Objet).temps_initial = SDL_GetTicks();
return 1;
}
else {return 0;}
} |
Partager