• Aucun résultat trouvé

TP 5 - TP not´ e

N/A
N/A
Protected

Academic year: 2022

Partager "TP 5 - TP not´ e"

Copied!
4
0
0

Texte intégral

(1)

IUT Littoral 2019 - 2020

Info 2A Ana. Num. – C++

TP 5 - TP not´ e

Ce TP not´ e est divis´ e en deux parties. Pour des raisons pratiques vous travaillerez uniquement sous linux (et de pr´ ef´ erence sur les machines de l’IUT). Une archive contenant le code ` a compl´ eter est disponible sur ma page ` a l’adresse suivante :

http://www.lmpa.univ-littoral.fr/~fromentin/teaching/2019/dut/tp-note.tar.gz Renommer le r´ epertoire nom-prenom avec vos nom et prenom. C’est ce r´ epertoire compl´ et´ e que vous me donnerez ` a l’issu du TP not´ e.

Attention. N’oubliez pas de faire des copies de sauvegardes r´ eguli` erement avant de ne pas tout perdre suite ` a une fausse manipultation.

1. Courbes de B´ ezier

Le but de cette partie est de tracer une courbe de B´ ezier cubique ` a l’aide de la librairie graphique SDL2. Elle est ` a r´ ealiser dans le r´ epertoire bezier.

Exercice 1. Nous allons commencer par cr´ eer une classe Point permettant de repr´ esenter des points ` a coefficients entiers. Cette classe sera cod´ ee dans les fichiers point.hpp et point.cpp.

a. Coder un constructeur prenant deux entiers x et y en param` etre et cr´ eant le point de coordonn´ ees (x, y ).

b. Coder deux accesseurs lire x et lire y retournant l’abscisse (resp. l’ordonn´ ee) du point courant

Les fonctions qui suivent ne sont pas des fonctions membres de la classe Point et sont donc ` a coder ` a l’ext´ erieur de la class Point.

c. Surcharger l’op´ erateur operator<< pour permettre d’afficher des objets de la classe Point.

d. Cr´ eer une fonction milieu qui ´ etant donn´ es deux points A et B retourne le milieu du segment [AB]

e. Cr´ eer une fonctions distance qui ´ etant donn´ es deux points A et B retourne la dis- tance d(A, B ) entre A et B.

A partir de maintenant vous n’aurez plus que le fichier ` main.cpp ` a modifier.

Exercice 2. Les courbes de B´ ezier cubiques sont cr´ eer ` a l’aide de quatre points quelcon- ques. Ces points seront directement positionn´ es ` a l’aide la souris. Vous devez modifier le code de la fonction main pour obtenir le comportement suivant :

• D` es que l’utilisateur clique dans la fenˆ etre on enregistre la position de la souris dans une variable de type Point.

• Si quatre points ont ´ et´ e cr´ e´ es de cette fa¸con afficher le message ”Dessin courbe de B´ ezier”

• Si l’utilisateur clique une cinqui` eme fois afficher le message ”Efface courbe de

B´ ezier” et consid´ erer ce nouveau point comme le premier d’une nouvelle courbe

de B´ ezier

(2)

2

Exercice 3. Nous allons maintenant dessin´ e les points d´ efinissant la courbe de B´ ezier.

a. Ecrire une fonction permettant de dessiner un ´ point A sous la forme d’un carr´ e de centre A. Les arrˆ etes du carr´ e seront de longueur 2c + 1 o` u c sera un entier positif qu’on d´ eterminera pour avoir un rendu satisfaisant. Vous pourrez tracer le carr´ e de la couleur que vous souhaitez.

b. Afficher les points d´ ej` a saisis lors de la construction de la courbe de B´ ezier ` a l’aide de la souris

Exercice 4.

a. Ecrire une fonction qui ´ etant donn´ e quatre points dessine une ligne bris´ ee reliant ces points.

b. Modifier le code de la fonction main pour que la ligne bris´ ee reliant les 4 points soit afficher lors de l’affichage du message ”Dessin courbe de B´ ezier”.

c. D` es que le message ”Efface courbe de B´ ezier” est affich´ e il faut que la ligne bris´ ee ne soit plus affich´ ee ` a l’´ ecran.

Nous disposons maintenant de tous les outils n´ ecessires pour tracer la courbe de B´ ezier

`

a l’aide de l’algorithme de De Casteljau.

A

B C

D

AB

BC

CD

ABC BCD

ABCD

Les points AB, BC, CD, ABC, BCD et ABCD sont plac´ es au milieu de leur segement respectif.

On dira qu’une courbe de B´ ezier d´ efinie par les points A, B, C et D est n´ egligeable si toutes les distances d(A, B), d(B, C), d(C, D) et d(A, D) sont inf´ erieurs ` a 0.1. Le tracer de la courbe de B´ ezier d´ efinie par les points A, B, C, D est

• la ligne reliant A ` a D si la courbe est n´ egligeable

• obtenu en tra¸cant la courbe de B´ ezier d´ efinie par le points A, AB, ABC, ABCD puis celle d´ efinie par les points ABCD, BCD, CD, D.

Exercice 5. Ecrire des fonctions permettant de :

a. D´ ecider si quatre points d´ efinissent une courbe de B´ ezier n´ egligeable.

b. Tracer la courbe de B´ ezier d´ efinie par quatre points donn´ es.

Exercice 6. Finir de tout mettre en place.

(3)

3

2. Pendule oscillant

Dans cette section nous souhaitons mod´ eliser un pendule oscillant ` a l’aide des m´ ethodes de Runge-Kutta d’ordre 1 et 2 (RK1 et RK2). Rappelons que ces m´ ethode permettent de r´ esoudres num´ eriquement des ´ equations diff´ erentielles du type :

y

0

(t) = f(t, y(t)) et y(0) = y

0

(1)

o` u y : R

+

→ R

d

est une fonction inconnue, t est une variable parcourant R

+

, le vecteur y

0

de R

d

est la condition initiale et f : R

+

× R

d

→ R

d

est une fonction connue d´ ependant du probl` eme ` a ´ etudier.

Nous rappelons aussi que pour tout intervalle I, une fonction g : I → R

d

est donn´ ee par

g(t) =

 g

1

(t)

.. . g

d

(t)

 pour t ∈ I,

o` u g

1

, . . . , g

d

sont des fonctions de I dans R . De plus si g est d´ erivable sur I alors nous avons

g

0

(t) =

 g

10

(t)

.. . g

d0

(t)

 pour t ∈ I.

Les m´ ethodes de Runge-Kutta ne donneront pas la fonction y solution de (1) mais donneront des valeurs approch´ ee de y(t) pour certaines valeurs de t. Commen¸cons par fix´ e un r´ e´ el strictement positif h suppos´ e petit. Pour tout n ∈ N , on pose t

n

= n × h.

Nous souhaitons alors obtenir une valeur approch´ ee a

n

de y(t

n

) pour tout n ∈ N .

Pour les deux m´ ethodes, la suite (a

n

) est d´ efinie par r´ ecurrence ` a partir de a

n

= y

0

et les formules de r´ ecurrence suivantes :

• a

n+1

= a

n

+ hf (t

n

, a

n

) pour la m´ ethode RK1,

• a

n+1

= a

n

+ hf t

n

+

h2

, a

n

+

h2

f(t

n

, a

n

)

pour la m´ ethode RK2.

Le code demand´ e sera ` a ´ ecrire dans le fichier main.cpp du r´ epertoire pendule1

Exercice 7. On consid` ere un pendule oscillant de masse m accroch´ e en A ` a l’aide d’une tige de longueur `. On note θ l’angle que forme la tige du pendule avec la verticale.

A θ `

a. Compl´ eter la fonction dessine pendule(double theta) permettant de dessiner le pendule (et sa tige) pour un angle θ donn´ e. Le point A sera le milieu de la fenˆ etre, la longueur de la tige sera de 200 pixels et le rayon du cercle sera de 30 pixels.

b. Tester votre fonction pour diff´ erentes valeurs de θ.

(4)

4

Pour la suite on suppose que l’angle θ vaut π/8 au temps t = 0.

Exercice 8. Dans le cas sans frottement l’angle θ(t) du pendule satisfait l’´ equation diff´ erentielle :

θ

00

(t) = − g

` sin(θ(t)) avec θ(0) = π

8 et θ

0

(0) = 0,

o` u g est la constante d’acc´ el´ eration gravitationnelle 9.81 m.s

−2

. On pose ω = θ

0

. L’´ equation pr´ ec´ edente devient alors :

( θ

0

(t) = ω(t)

ω

0

(t) = −

g`

sin(θ(t)) avec

( θ(0) =

π8

ω(0) = 0 (2)

Cette ´ equation est la mˆ eme que celle donn´ ee en (1) en posant y(t) = θ(t)

ω(t)

. a. Compl´ eter la fonction

void f(double t,double theta,double omega,double& dtheta,double& domega) qui ´ etant donn´ ees theta = θ(t) et omega = ω(t) stocke les valeurs de θ

0

(t) et ω

0

(t) dans dtheta et domega respectivement (voir ´ equation (2)).

b. Compl´ eter la fonction

void rk1(double t,double& theta,double& omega) qui met ` a jour les valeurs de θ et ω ` a l’aide de la m´ ethode RK1.

c. L’animation obtenue est-elle conforme ` a la r´ ealit´ e ? On pourra tester diff´ erentes valeurs de `.

d. Compl´ eter la fonction

void rk2(double t,double& theta,double& omega) qui met ` a jour les valeurs de θ et ω ` a l’aide de la m´ ethode RK2.

e. Modifier la boucle ´ ev´ enementielle afin d’utiliser RK2 ` a la place de RK1 pour l’animation du pendule.

f. L’animation obtenue est-elle conforme ` a la r´ ealit´ e ? Quelle m´ ethode vous semble la plus adapt´ ee ? On pourra tester diff´ erentes valeurs de `.

Dupliquer votre fichier main.cpp contenu dans le r´ epertoire pendule1 dans le r´ epertoire pendule2. ` A partir de maintenant vous travaillerez dans le r´ epertoire pendule2.

Exercice 9. Dans le cas avec frottement l’angle θ(t) du pendule satisfait l’´ equation diff´ erentielle :

θ

00

(t) = − g

` sin(θ(t)) − k

m`

2

θ

0

(t) avec θ(0) = π

8 et θ

0

(0) = 0,

o` u g est la constante d’acc´ el´ eration gravitationnelle 9.81 m.s

−2

et k une constante sans unit´ e correspondant au coefficient de frottement visqueux. La valeur k = 0 correspond au cas sans frotement.

a. Que devient le syst` eme d’´ equation (2) dans ce cas.

b. D´ efinir une variable globale k valant 0.5.

c. Modifier la fonction f en fonction des nouvelles equations obtenues.

d. Faire des simulations pour diff´ erentes valeurs de k.

Références

Documents relatifs

On colore le point c avec un niveau de gris variant avec le rapport n/N.. Vous pouvez aussi tenter

Ecrire un programme qui demande à l’utilisateur une chaine de carac- tère puis un entier n, et affiche ensuite la chaîne n fois à l’écran en sautant une ligne entre chaque

Cette question a ´et´e trait´ee par les candidats ayant correctement r´epondu `a la pr´ec´edente, mˆeme si, souvent, ceux qui ont bien ´ecrit dans la question pr´ec´edente que

Cette pratique est certes justifiable (mais jamais justifi´ ee) mais elle interdit aux candidats, h´ elas nombreux, qui se sont tromp´ es dans le calcul des valeurs propres de se

◦ Vous devrez rendre votre copie, sous la forme d’un fichier Coq, ` a la fin de la s´ eance en l’envoyant par e-mail ` a l’adresse dcousinemaison @lri.fr avec un sujet

On introduit une relation moves qui correspond ` a une suite de

I/ Le volume : Décrire l’expérience que vous allez réaliser grâce à une phrase et des schémas propres, à la règle et légendés).. II/ La masse : Décrire l’expérience

I/ Le volume : Décrire l’expérience que vous allez réaliser grâce à une phrase et des schémas propres, à la règle et légendés). Phrase : Je mesure un volume