• Aucun résultat trouvé

Partiel LI260 - Groupe 1

N/A
N/A
Protected

Academic year: 2022

Partager "Partiel LI260 - Groupe 1"

Copied!
3
0
0

Texte intégral

(1)

Module LI260 – Licence 2 ann´ee 2011–2012

Partiel LI260 - Groupe 1

Exercice 1 – H´eritage vs D´ecoration pour l’ajout d’obstacles dans le circuit

Pour rappel, le cahier des charges d’un circuit (avec Dijkstra int´egr´e) : public i n t e r f a c e C i r c u i t {

public double g e t D i s t (i n t i , i n t j ) ; // Pour i n t e r r o g e r d i j k s t r a public T e r r a i n g e t T e r r a i n (i n t i , i n t j ) ;

public T e r r a i n g e t T e r r a i n ( V e c t e u r v ) ; public V e c t e u r g e t P o i n t D e p a r t ( ) ; public V e c t e u r g e t D i r e c t i o n D e p a r t ( ) ; public V e c t e u r g e t D i r e c t i o n A r r i v e e ( ) ; public i n t getWidth ( ) ;

public i n t g e t H e i g h t ( ) ;

public A r r a y L i s t<V e c t e u r> g e t A r r i v e e s ( ) ; }

On veut cr´eer un syst`eme g´en´erique pour ajouter des obstacles dans le circuit (possibilit´e d’ajouter des obs- tacles rectangles, ronds...). Un obstacle permettra donc de coder la d´efinition d’un zone de l’espace (pour une coordonn´ee il est n´ecessaire de savoir si on est sur l’obstacle ou pas). On construira ensuite une nouvelle impl´ementation de circuit g´erant les obstacles.

Q 1.1 Obstacle

Q 1.1.1Cahier des charges

Qu’est qu’un obstacle du point de vue du cahier des charges ? (expliquer en une ou deux phrases) Utiliseriez vous une interface ou une classe abstraite pour l’impl´ementer ? (expliquer en une ou deux phrases) Donner le code de la classe/interface Obstacle.

Q 1.1.2Concr´etisation

Donner le code d’un obstacle rectangle et d’un obstacle rond (en accord avec la question pr´ec´edente).

Q 1.2 Prise en compte des obstacles dans le Circuit

L’id´ee de base est simple : on veut prendre en compte les obstacles sans changer le code de la classe circuit (principe de base d’une ´evolution saine du code : on ajoute des classes sans modifier l’existant). On souhaite (´evidemment) pouvoir ajouter plusieurs obstacles (nombre ind´etermin´e) de n’importe quel type (rectangle, rond ou autres d´efinis dans le futur).

Q 1.2.1Par h´eritage

Donner le code de la classe CircuitAvecObstacleHeritage qui impl´emente l’id´ee ci-dessus en utilisant l’h´eritage.

Vous ferez attention `a bien d´efinir le constructeur, les m´ethodes d’ajout et d’interrogation du circuit. Vous indiquerez explicitement, `a l’aide de commentaires, les m´ethodes qui sont sur-charg´ees par rapport `a la classe originale.

Q 1.2.2Par d´ecoration

Donner le code de la classe CircuitAvecObstacleDecoration qui r´ealise exactement les mˆemes op´erations que dans la question pr´ec´edente mais en prenant un attribut Circuit `a d´ecorer. Attention, pour que cette classe soit facilement utilisable dans le main, il faut qu’elle impl´emente l’interface Circuit (pour qu’elle soit consid´er´ee comme un Circuit depuis le main).

Q 1.2.3Exemples d’usage

Donner 2 versions des quelques lignes du main permettant d’instancier un tel circuit (dans les cas d’h´eritage et de d´ecoration).

NB1 : vous pouvez utiliser des classes qui n’existent pas actuellement si vous ajoutez en commentaire leur fonction.

NB2 : afin de d´emontrer la fonctionnalit´e du code pr´ec´edent, vous ajouterez un obstacle `a chaque fois.

(2)

Module LI260 – Licence 2 page 2

Q 1.2.4R´eflexions sur les deux solutions

Quels sont les avantages et inconv´enient des deux solutions ?

Pistes de r´eponse : - comparer le type de l’objet qui est ´etendu par h´eritage avec le type de l’attribut qui est d´ecor´e dans la seconde solution. - comparer comment sont instanci´es les deux objets. - comparer le nombre d’indirection (c’est `a dire le nombre d’appels de fonctions pour effectuer une mˆeme op´eration dans les deux architectures).

Q 1.3 P´er´enisation : sauvegarde/chargement

Quels sont les enjeux et les choix `a faire au niveau de la sauvegarde des circuits avec obstacles ? Proposer une ou plusieurs architecture de sauvegarde chargement des circuits avec obstacles (pas de code mais des diagrammes de classe o`u vous pouvez pr´eciser quelques fonctions `a impl´ementer).

Exercice 2 – Algorithmique : radar parabolique

Le radar parabolique (cf Fig. 1a) est un nouvel outil `a utiliser en plus d’un radar classique/dijkstra (il ne le remplace pas). Ce radar va tenter de contourner les obstacles pour anticiper les virages et d´eterminer s’ils sont plus ou moins serr´es. Cela peut permettre de travailler sur une trajectoire optimale de franchissement du virage ou simplement de freiner un peu en avance.

Prédiction Réglage de l’avance

Mesure de la force du virage à venir (x_max,y_max)

35 30 25 20 15 10 5 0 40

−20 −10 0 10 20

(a) Ensemble du radar

0 5 10 15 20 25 30 35 40

-25 -20 -15 -10 -5 0

(b) Analyse d’un faisceau

Figure1 – La voiture est en (0,0) et avance vers l’avant. Les faisceaux paraboliques permettent de contourner un obstacle pour voir s’il y a un point dijkstra int´eressant derri`ere : cela permet d’anticiper un virage plus ou moins serr´e.

Les faisceaux ont pour ´equationy=ax2+bx+c. Le param´etrage du radar se fait en donnant : – ymax : la hauteur du maximum (sur la Fig 1,ymax= 40)

– xmax: la d´eviation enxdu point max de la parabole (sur la Fig 1a,xmaxprend les valeurs : [−12.5, −10, −7.5, −5, 5, 7.5, 10, 12.5]).

Les ´equations des faisceaux correspondent `a :b= 2ymax/xmax, a=−b/(2xmax), c= 0.

Algorithme d’analyse sur un faisceau :

A partir de la position et de la direction de la voiture, nous voulons extraire les coordonn´ees de 100 points r´epartis le long d’un faisceau (cf Fig 1b). L’id´ee est la suivante : on calcule 100 valeurs de xentre 0 et 2xmax. Pour chaque valeur, on calcule la valeury associ´ee. Il faut ensuite faire un changement de rep`ere pour obtenir des coordonn´ees dans l’espace du circuit.

– Calculer l’angleαentre la direction de la voiture et la direction (0,1). Vous supposerez que vous disposez de la fonction ad´equat, soit dans la classe Vecteur, soit dans une classe Tools.

– Appliquer une rotationαsur les coordonn´ees (x, y).

– Appliquer la translation suivante :x←x+voiture.x,y←y+voiture.y

Une fois les points dans le bon espace, l’algorithme est tr`es proche du radar Dijkstra : on parcours les points tant que l’on n’est pas dans l’herbe et on note le score le plus int´eressant.

(3)

Module LI260 – Licence 2 page 3

Q 2.1Impl´ementation

Q 2.1.1Quels sont les attributs du radar parabolique ?

Donner la signature du constructeur ainsi qu’un exemple de construction d’un tel radar depuis le main.

NB : on part du principe que dijkstra est int´egr´e au circuit et accessible `a tout moment via la fonction d´ecrite dans l’exercice 1.

Q 2.1.2Donner le code de la m´ethodedouble scoreFaisceau(double xmax)qui prend en argument xmax et qui retourne le meilleur score dijkstra rencontr´e.

NB1 :ymaxdevra ´evidemment ˆetre accessible, ainsi que les donn´ees de la voiture.

NB2 : question (un peu) difficile qui n´ecessite sans doute un peu de r´eflexion au brouillon.

NB3 : on partira de x=0 pour aller vers xmax. Si on rencontre de l’herbe, on s’arrˆete.

NB4 : il peut ˆetre utile de coder le changement de rep`ere dans une m´ethode priv´ee `a part pour faciliter la lecture du code.

Q 2.1.3Donner le reste du code de la classe RadarParabolique.

NB1 : vous pourrez choisir de faire de l’h´eritage par rapport au radar classique ou pas.

NB2 : vous mettrez quelques commentaires pour que je m’y retrouve si vous faites appel `a des m´ethodes/attributs issus de la classe m`ere

Pour rappel, l’interface Radar est la suivante : public i n t e r f a c e Radar {

public double[ ] s c o r e s ( ) ; // s c o r e de c h a q u e b r a n c h e public double[ ] d i s t a n c e s I n P i x e l s ( ) ; // pour l ’ o b s e r v e r public i n t g e t B e s t I n d e x ( ) ; // m e i l l e u r i n d i c e

public double[ ] t h e t a s ( ) ; // a n g l e s de c h a q u e f a i s c e a u }

Q 2.2Observation

Proposer une technique d’observation du radar parabolique. Expliquer votre approche en quelques phrases. S’il vous reste du temps `a la fin, proposez un code r´ealisant l’op´eration.

Q 2.3Strat´egie

Proposer une strat´egie `a partir du radar parabolique (en quelques phrases, pas de code).

NB : vous pouvez ´evidemment ajouter d’autres radars.

Q 2.4(Un peu de) math´ematiques

Montrer que les param`etres de la parabole sont bien :b= 2ymax/xmax, a=−b/(2xmax), c= 0

Références

Documents relatifs

Dans quel cas le générateur est-il court- circuité ? Justifie ta réponse en indiquant le trajet du courant. Schématise le circuit ci-dessous en indiquant les

Si on se donne une famille d'ensembles (E s ) seS et une famille R.A.I.R.O. Informatique théorique/Theoretical Informaties.. L'existence d'un ordre entre sommets a pour but

médiatrices des segments PQ, OP et OQ. Celles-ci sont concourantes en un point O’ qui est le centre du cercle circonscrit au triangle OPQ. Les points X et Y sont donc confondus

Quelles
seraient
les
contraintes
de
création
de
l’image
pour
que
l’importation
se
fasse
facilement
?


Q 4.2 Donner les quelques lignes du main qui permettent de brancher la t´ el´ em´ etrie sur la course ` a jouer Q 4.3 Comparer les deux approches : laquelle vous semble la plus

Une fois terminé il vous suffira de cliquer sur le bouton précédent de votre navigateur Web (en haut à gauche) pour revenir à cette page. Copyright © Cours de Physique et de Chimie

Dans ce cas, tous les appareils sont reliés les uns aux autres sans faire de &#34;trous&#34; dans le circuit.. circuit fermé Le circuit est fermé et la

Une fois terminé il vous suffira de cliquer sur le bouton précédent de votre navigateur Web (en haut à gauche) pour revenir à cette page. Copyright © Cours de Physique et de Chimie