[LCP2] starlight

Voir le sujet précédent Voir le sujet suivant Aller en bas

[LCP2] starlight

Message  nvs le Mar 31 Mar 2015, 13:45

j'ai reçu quelques questions par email. je pense qu'il est bien de les partager.

Raphaël a écrit:Suite a la lecture du code que vous avez poster sur poesi, je n'ai pas trouvé de réponse au problème que je rencontre actuellement ... A savoir, calculer si le rayon touche quelque chose?

J'avais imaginé faire des boucles et regarder pixel après pixel si des coordonnées se rejoignent mais cela ne fonctionne encore que si ce n'est pas en diagonale ... Auriez vous un conseil ?
dans la bibliothèque fournie, chaque classe des objets du jeu starlight possède une classe géométrique sous-jacente. ainsi, les rayons de lumière sont des nvs::LightRay et ils possèdent une méthode line() qui retourne la droite associée au rayon ainsi que la méthode contains qui tient compte de la firection de propagation. si je prends un cristal, la classe nvs::Crystal utilise un nvs::Circle. cette dernière classe possède la méthode bool intersection(const Line & line, std::vector<Point2Dd> & points) const. il est donc possible de déterminer si la demi-droite associée au rayon lumineux touche le cristal à l'aide de toutes ces méthodes. par ailleurs, c'est ce que fait la méthode nvs::Crystal::interaction.

Aris a écrit:Je suppose que je dois avoir un attribut "Level *" dans mon MWStarlight
il doit y avoir moyen de passer par un Level automatique plutôt que dynamique puisqu'on ne doit en fait en créer qu'un seul tout au long de la vie du programme. un attribut Level est probablement plus prudent.

Aris a écrit:Pour "remplir" le constructeur de "Level" (et donc les vecteurs des différents types d'éléments de la map) comment dois-je m'y prendre ? Je ne vois pas s'il faut rajouter des attributs qui sont des vecteurs (de mirroirs, de murs, etc...) dans MWStarlight et les remplir à mesure que je lis le fichier, ou bien des attributs du type des éléments de la map tout court, ... ou s'il faut complètement autre chose...
je n'aime pas l'idée de construire un Level puis d'y ajouter des éléments. c'est un choix idéologique et je comprends parfaitement qu'on désire procéder autrement. je n'en vois pas l'intérêt ici puisque les Levels sont statiques. je préfère donc les créer avec tout leur contenu en argument de construction. et donc, oui, je crée des vectors etc. dans une méthode de MWStarlight, méthode qui invoque la fonction de lecture qui elle-même reçoit en paramètre en sortie (référence non constante) ces vector pour lui permettre de les garnir. vient enfin l'appel du constructeur de Level avec les conteneurs chargés.

Aris a écrit:Si j'ai bien saisi, j'aurai une classe "observateurStarlight" avec un pointeur de Level (* sdo) comme seul attribut ainsi qu'un attribut de type pointeur de "observateurStarlight" dans mon MWStarlight !?
dans la mesure où l'observateur est un élément graphique, je pense que lui donner un parent au sens de qt est une bonne idée. dans MWStarlight, l'attribut pourrait peut-être ne pas être un pointeur, mais un objet automatique.

Issam a écrit:Je voudrais juste savoir comment sélectionner un objet d'un QPainter avec la souris, j'ai lu la documentation sur QMouseEvent mais je n'y ai trouver aucune réponse.
le QPainter est associé à l'objet sur lequel il permet de dessiner. le QPainter ne contient pas d'objet graphique. lorsqu'on trace un cercle, c'est juste un dessin, il n'y a pas d'objet cercle qui va avec. donc si tu veux savoir si on a cliqué sur un cercle dessiné à l'aide d'un QPainter, tu dois déterminer si le QWidget auquel le QPainter est associé a été cliqué et si les coordonnées du clic correspondent à la zone où le cercle est dessiné. tu dois donc surdéfinir void mousePressEvent(QMouseEvent * event) du QWidget et aller voir du côté de QMouseEvent pour récupérer les infos relatives au clic. pour savoir si un point est donc un cercle, la classe nvs::Circle et sa méthode contains peut aider.






monkey

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [LCP2] starlight

Message  algra le Mar 14 Avr 2015, 10:31

Bonjour,

Je me demande si ma démarche pour trouver un autre point pour tracer ma droite(rayon) à partir de ma source est correcte ...
Donnée:

  • l'angle de la source = alpha  



  • le point(p1) (x1,y1) de la source  


Donc, pour trouver mon autre point:
1. Je choisis une longueur L quelconque

2. Donc j'ai un nouveau point(p2) avec x2= x1+L et y2=y1

3. Pour calcul mon autre point(p3), je calcule d'abord la longueur de l'hypoténuse.
Hypoténuse = L / cos(alpha)
Puis je calcule, le plongeur du côté opposé:
Opposé = sin(alpha) * Hypotenuse

4. p3 : (x3 = x2 , y3 = y2 + opposé)

Je pensais que ma démarche était correcte, mais lorsque je trace cette droite, elle n'atteint pas mon miroir comme ce devrait l'être normalement.


algra

Nombre de messages : 45
Age : 21
Prénom : Alexis
Statut : Ancien
Date d'inscription : 16/09/2013

Revenir en haut Aller en bas

Re: [LCP2] starlight

Message  Romain le Mar 14 Avr 2015, 19:08

Salut,

je ne suis pas certain de bien comprendre ta façon de modéliser. Par ailleurs, je te suggère de ne pas te focaliser sur la source, dans la mesure où elle ne concerne que le rayon initial.

Pour bien poser les choses : une droite (un rayon, un miroir, un mur) peut s'écrire en équation sous la forme ax + by + c = 0, où x et y sont des variables et a, b et c des paramètres réels. Ce type d'équation a l'avantage d'inclure les droites verticales, ce qu'une équation de type y = mx + p ne fait pas (cf. cours de mathématiques de première).

Pour simplifier, considère dans un premier temps que tous tes composants miroirs, murs et rayons sont des droites en ce sens. C'est de la triche, oui, car les miroirs, les murs et les rayons sont des segments de droite, mais on discutera de cette situation plus tard.

Dans le cas général, tu connais l'équation du rayon incident. ce que tu veux calculer, au vu de ta question, c'est l'équation du rayon réfléchi. Tu sais (cf. figure de l'énoncé) qu'un rayon se réfléchit sur un miroir avec un angle égal à celui par lequel il est entré. Pour calculer l'équation d'une droite, tu as besoin, soit de deux points, soit d'un point et d'un angle. Comme on ne sait pas encore où le rayon réfléchi va s'arrêter, on préférera la deuxième possibilité.

Tu as deux choses à faire.

  1. Calculer, en radians, l'angle par lequel le rayon incident arrive sur le miroir. Avec cela, tu as automatiquement l'angle réfléchi. Problème : l'amplitude de cet angle est mesurée par rapport au miroir. Pour écrire une équation de droite, il faut avoir cet angle par rapport à l'horizontale.
  2. Calculer, en radians, l'angle réfléchi par rapport à l'horizontale (je t'encourage à faire un dessin) sur base du point précédent.


Avec cet angle calculé, tu peux écrire l'équation de la droite (et éventuellement calculer l'intersection de ce nouveau rayon avec un autre élément du décor).

Une dernière petite note : comme tu "triches" en considérant les murs, miroirs et rayons comme des droites, quand tu calcules une intersection, tu dois vérifier qu'elle se trouve bien sur ton composant. Si un rayon intersecte un miroir ou un mur, tes intersections de droites vont te donner un point comme intersection, mais ce n'est pas dit que cette intersection se trouve en dehors du segment qui modélise le miroir ou le mur.

Essaye sur base de ces informations, si tu as encore besoin d'aide, je t'encourage à me contacter par email : tu auras une réponse beaucoup plus rapidement que via ce forum.

Romain

Nombre de messages : 2
Prénom : Romain
Date d'inscription : 14/04/2015

Revenir en haut Aller en bas

Re: [LCP2] starlight

Message  nvs le Mar 14 Avr 2015, 19:17

Romain a écrit:[...], si tu as encore besoin d'aide, je t'encourage à me contacter par email : tu auras une réponse beaucoup plus rapidement que via ce forum.
voila qui me semble être une bien mauvaise idée. les questions et réponses ont, amha, tout intérêt à être largement partagées. par ailleurs, les profs ne détiennent pas (seuls) la vérité, le forum présente l'avantage de laisser des étudiants répondre aux étudiants.





pig

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [LCP2] starlight

Message  algra le Mer 15 Avr 2015, 11:17

Romain a écrit:Salut,
Avec cet angle calculé, tu peux écrire l'équation de la droite (et éventuellement calculer l'intersection de ce nouveau rayon avec un autre élément du décor).

J'ai cet angle et le point d'intersection avec le miroir, mais dans votre équation ax+by+c=0 ou je place mon angle ?

Admettons que mon point d'intersection est situé en (2,5) et un angle de 1.1868 rad , l'équation devient :  2a + 5b + c = 0 ?
Ou je place

  • mon angle
  • et par quelle valeur sont remplace a,b et c car celle-ci sont des constantes réelles mais quelle constante réelle  scratch   ?



algra

Nombre de messages : 45
Age : 21
Prénom : Alexis
Statut : Ancien
Date d'inscription : 16/09/2013

Revenir en haut Aller en bas

Re: [LCP2] starlight

Message  mvh le Mer 15 Avr 2015, 12:07

[Suggestion pour 2016]
supprimer tout ou une partie (suffisante) du cours de Java 1ère ... et le remplacer par un chouette cours de géométrie analytique pour en faire les prérequis incontournables du LPC21 ... et aussi un peu de descriptives pour les ateliers dessins ...

1 - je floute pour éviter les jalousies et les luttes intestines qui en découleraient immanquablement en terrain sensible de salle des personnels ...
[/Suggestion pour 2016]

_________________

La fête c'est nul sans Kidibul !
... (vieux proverbe local)



mvh

Nombre de messages : 5973
Age : 104
Prénom : Marcel VANHAELEN
Statut : (fin de bail)
Win 3.1 à reprendre
Localisation : Koekeliek de Baselberg
Date d'inscription : 06/12/2006

Revenir en haut Aller en bas

Re: [LCP2] starlight

Message  nvs le Mer 15 Avr 2015, 12:31

algra a écrit:
Romain a écrit:Salut,
Avec cet angle calculé, tu peux écrire l'équation de la droite (et éventuellement calculer l'intersection de ce nouveau rayon avec un autre élément du décor).

J'ai cet angle et le point d'intersection avec le miroir, mais dans votre équation ax+by+c=0 ou je place mon angle ?

Admettons que mon point d'intersection est situé en (2,5) et un angle de 1.1868 rad , l'équation devient :  2a + 5b + c = 0 ?
Ou je place

  • mon angle
  • et par quelle valeur sont remplace a,b et c car celle-ci sont des constantes réelles mais quelle constante réelle  scratch   ?


dans le cas que tu prends, la droite n'est ni horizontale (angle != k π rad, k entier), ni verticale (angle != k π/2 rad, k entier). tu peux alors te simplifier la vie en prenant b = 1 et avoir la droite d'équation a x + y + c = 0 ou encore y = -a x - c. et là, tu te rappelles que la pente de la droite est -a et que la pente de la droite est la tangente de l'angle que fait la droite avec l'axe horizontal...

sinon, tu es certain de ne pas pouvoir utiliser la bibliothèque géométrique fournie ?









silent

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [LCP2] starlight

Message  mvh le Mer 15 Avr 2015, 13:36

nvs a écrit:
(...)
ni verticale (angle != k π/2 rad, k entier).
(...)
silent
... pas tout à fait correct ... à mon avis ...
... un petit cours de trigono ... peut être aussi à prévoir ... çà peut toujours servir ... Wink

_________________

La fête c'est nul sans Kidibul !
... (vieux proverbe local)



mvh

Nombre de messages : 5973
Age : 104
Prénom : Marcel VANHAELEN
Statut : (fin de bail)
Win 3.1 à reprendre
Localisation : Koekeliek de Baselberg
Date d'inscription : 06/12/2006

Revenir en haut Aller en bas

Re: [LCP2] starlight

Message  nvs le Mer 15 Avr 2015, 13:39

mvh a écrit:
nvs a écrit:
(...)
ni verticale (angle != k π/2 rad, k entier).
(...)
silent
... pas tout à fait correct ... à mon avis ...
... un petit cours de trigono ... peut être aussi à prévoir ...
Embarassed  en effet : pas verticale car angle != π/2 + k π rad, k entier.

merci mvh pour ton incessante vigilance Very Happy et voila un autre avantage du forum sur le courrier privé : les erreurs sont rapidement mises au jour par de brillants intervenants externes mais curieux et avertis ! l'inconvénient c'est qu'on passe pour un con pétant aux yeux du monde entier, mais c'est un détail Wink






pale

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [LCP2] starlight

Message  mvh le Mer 15 Avr 2015, 13:47

nvs a écrit:
mvh a écrit:
nvs a écrit:
(...)
ni verticale (angle != k π/2 rad, k entier).
(...)
silent
... pas tout à fait correct ... à mon avis ...
... un petit cours de trigono ... peut être aussi à prévoir ...
Embarassed  en effet : pas verticale car angle != π/2 + k π rad, k entier.

merci mvh pour ton incessante vigilance Very Happy

pale
... brave Nicolas ... je ne serai pas toujours là pour t'aider ... ainsi va la vie  !  toutefois  je passerai de temps à autre que tu ne te sentes pas oublié et tu pourras toujours compter sur moi dans les moments les plus durs ... courage ... I love you


_________________

La fête c'est nul sans Kidibul !
... (vieux proverbe local)



mvh

Nombre de messages : 5973
Age : 104
Prénom : Marcel VANHAELEN
Statut : (fin de bail)
Win 3.1 à reprendre
Localisation : Koekeliek de Baselberg
Date d'inscription : 06/12/2006

Revenir en haut Aller en bas

Re: [LCP2] starlight

Message  algra le Mer 15 Avr 2015, 15:41

nvs a écrit: et là, tu te rappelles que la pente de la droite est -a et que la pente de la droite est la tangente de l'angle que fait la droite avec l'axe horizontal...

silent

Merci pour cette piqure de rappel Smile

algra

Nombre de messages : 45
Age : 21
Prénom : Alexis
Statut : Ancien
Date d'inscription : 16/09/2013

Revenir en haut Aller en bas

Re: [LCP2] starlight

Message  Romain le Mer 15 Avr 2015, 15:42

Fais attention toute de même : ton axe des y est inversé...

Romain

Nombre de messages : 2
Prénom : Romain
Date d'inscription : 14/04/2015

Revenir en haut Aller en bas

Re: [LCP2] starlight

Message  nvs le Mer 15 Avr 2015, 16:08

oui enfin rien n'oblige à inverser l'axe des y immédiatement. on peut ne le faire qu'au moment de la représentation graphique et non dans les classes métier.





What a Face

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [LCP2] starlight

Message  Contenu sponsorisé Aujourd'hui à 10:52


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum