IMA5 2022/2023 P20 : Différence entre versions
(→Travail hebdomadaire réalisé) |
(→Semaine 3 (3/10/2022 - 9/10/2022)) |
||
Ligne 160 : | Ligne 160 : | ||
*Certaines boules reste en collision, ce bus arrive rarement, mais une correction devra être nécessaire pour corriger ce bug. | *Certaines boules reste en collision, ce bus arrive rarement, mais une correction devra être nécessaire pour corriger ce bug. | ||
− | ==Semaine 4 (17/10/22 - 21/10/22) | + | ==Semaine 4 (17/10/22 - 21/10/22)== |
*Avancée sur l'interface graphique / simulation | *Avancée sur l'interface graphique / simulation | ||
Ligne 169 : | Ligne 169 : | ||
*Apprentissage de la technologie OpenCV pour le traitement d'image | *Apprentissage de la technologie OpenCV pour le traitement d'image | ||
− | ==Semaine 5 (7/11/22 - 10/11/12) | + | ==Semaine 5 (7/11/22 - 10/11/12)== |
*Élaboration du rapport de mi-projet | *Élaboration du rapport de mi-projet |
Version du 13 novembre 2022 à 14:50
Sommaire
Présentation générale
Contexte
En 2015 des étudiants de la filière IMA de Polytech ont réalisé une table connectée comportant un écran tactile pour leur projet de fin d'études. Cette table est aujourd'hui inexploitée.
Objectifs
L'objectif de ce projet est donc de créer un jeu de billard en réalité augmentée en profitant des caractéristiques de la table. En plus d'offrir une expérience unique grâce à une caméra qui permet de jouer avec une queue adaptée similaire à celle d'un véritable billard. Il sera également possible de suivre les parties grâce à une application mobile sur un appareil connecté en Bluetooth à la table.
Historique
Ce projet sera le deuxième projet réalisé sur cette table connectée, après la réalisation en 2018 d'une table de bar connectée par des étudiants en IMA de Polytech Lille. [1]
La réalisation de la table de billard a été fait par sur ce wiki [2]
Cahier des charges
Fichier:P20 2022 2023 cahier des charges.pdf
Cahier des spécifications
Fichier:P20 2022 2023 cahier des spec.pdf
Diagramme de Gantt prévisionnel
Mathématiques générale liée au billard
Généralités sur le mouvement en deux dimensions
La boule sera soumise à une vitesse à deux dimensions (selon l'axe des x et y), où la vecteur vitesse se calcule de la sorte :
La nouvelle position de la boule à un intervalle de temps donnée sera (de même pour l'axe des y)
La nouvelle vitesse de la boule à un intervalle de temps donnée doit être calculé selon son vecteur vitesse et l'accélération, alors :
- on calcule son vecteur vitesse
- on normalise les deux vitesse de l'axe des x et y en divisant ces derniers par le vecteur vitesse (cela permet de garder en mémoire le sens ainsi de l'angle du vecteur vitesse).
- On applique l'accélération au vecteur vitesse où :
- Finalement, on recalcule les vitesses en deux dimension en multipliant (3) par (2)
On obtient ce résultat en appliquant une vitesse de 4m/s selon l'axe des x :
Fichier:P20 2022 2023 Demo3.gif
Réponse de collision avec le mur
Ici c'est simple,
- le mur du haut et du bas aura pour effet de changer le sens de la vitesse de la balle sur l'axe des x, en d'autres termes, si la vitesse était positive, alors elle sera négative et vice-versa.
- le mur de gauche et de droite aura le même effet mais pour l'axe des y
Voici la démonstration montrant la réponse d'une balle sans perte de vitesse :
Fichier:P20 2022 2023 Demo1.gif
Calcul de collision entre deux balles
Il faut calculer si deux balles sont en collision, il existe une façon simple de calculer cette collision. Soit deux objets circulaire :
- C1 de centre (x1,y1) et de rayon r1
- C2 de centre (x2,y2) et de rayon r2
Si on imagine une ligne entre les deux centres des cercles, la distance D qui sépare les deux centres est :
- si les deux boules sont en collision
- si les deux boules ne sont pas en collision
Pour faire l'algorithme de collision, il suffit de vérifier que :
Il est aussi possible de calculer l'angle α à partir de formules basique de trigonométrie :
Et éventuellement le point de collision (x3,y3) à partir du centre de la boule C1 (x1,y1,r1) :
Réponse à la collision entre deux balles
Dans un premier temps, on dissout les vitesses des deux boules selon l'axe de collision. Puis on calcule la valeur scalaire de ces nouvelles vitesses.
Ainsi, les vitesses initiales seront décomposés en deux composantes:
- Une composante transmis à l'autre boule égale à la vitesse transmis selon l'axe de collision (décomposée sur l'axe des x et y)
- L'autre composante, est la vitesse gardée par la boules, qui sera le résultat de la soustraction entre la valeur scalaire de la vitesse initial et la vitesse transmise à l'autre boule
Voici la démonstration sur une table composée de 16 boules sans perte de vitesses :
Fichier:P20 2022 2023 Demo2.gif
Fonctionnement de la simulation
La simulation sera intégralement codé en langage Java pour ces raisons :
- Ce langage est l'un des plus rapide sur l'exécution par rapport au langages orientée objet concurrent (par exemple C++ ou Python)
- Ce langage est un langage que nous connaissons bien, notre choix est pour respecter les échéances
Fonctionnement de la simulation en jeu
Lorsque le coup n'est pas encore joué
Lorsque le coup est joué
Lorsque le joueur effectue un coup, on appelle la méthode update() de la classe BallTable, qui aura pour effet de mettre à jour les positions des balles ainsi que leurs vitesses. Cette méthode applique cet algorithme :
Le prise en compte des règles du billard ne sont pas encore pris en compte, et le sera très prochainement
Travail hebdomadaire réalisé
Semaine 1 (05/09/2022 - 09/09/2022)
- Réalisation du cahier des charges
- Ébauche d'un diagramme de Gantt prévisionnel en début de projet
- Étude des moyens disponible pour la réalisation de l'interface graphique
- Étude des mathématiques appliquée au billard
- Étude de la collision entre deux boules
- Commencer la constructions des classes pour l'interface
Semaine 2 (19/09/2022 - 23/09/2022)
- Réalisation du cahier des spécifications
- Étude sur le choix du matériau pour la queue
- Brainstorming sur la hiérarchie de nos classes java
- Étude mathématique :
- Étude des nouvelles vitesses après un choc
- Étude de la collision avec un mur
- Codage de la classe "Renderer" pour la simulation graphique
Semaine 3 (3/10/2022 - 9/10/2022)
- Avancée sur l'interface graphique
- Réalisation de la table
- Réalisation du design des boules
- Codage des algorithmes de mise à jour de la table de jeu
- Tests des algorithmes
- Réponse de collisions sur les murs marche
- Réponse de collisions sur les boules marche
- Mise à jour des vitesses et positions marche
Bugs connu à ce jour sur notre simulation :
- Certaines boules reste en collision, ce bus arrive rarement, mais une correction devra être nécessaire pour corriger ce bug.
Semaine 4 (17/10/22 - 21/10/22)
- Avancée sur l'interface graphique / simulation
- Intégration des listeners
- Tests des algorithmes sur la coup de casse
- Débug des bugs connus
- Amélioration de l'interface graphique
- Apprentissage de la technologie OpenCV pour le traitement d'image
Semaine 5 (7/11/22 - 10/11/12)
- Élaboration du rapport de mi-projet
- Préparation des slides pour la soutenance
- Début de restructuration de notre projet
- Brainstorming pour la suite des opération
Liens externes
Lien GitLab : lien
Cahier des charges : Fichier:P20 2022 2023 cahier des charges.pdf
Cahier des spécifications : Fichier:P20 2022 2023 cahier des spec.pdf
Présentation mi-travail PFE du 10/11 : Fichier:P20 2022 2023 pres miPFE.pdf
Présentation PFE final : Fichier:P20 2022 2023 pres final.pdf
Rapport final : Fichier:P20 2022 2023 rapport final.pdf