Course et ralentissement

Olympiades mathématiques, énigmes et défis
MakMak1
Messages: 5
Enregistré le: 11 Juin 2019, 22:11

Course et ralentissement

par MakMak1 » 11 Juin 2019, 22:26

Bonjour !

Je rencontre actuellement un problème en programmation. Je le pose en problème classique :

Soit deux voitures, A et B, qui font une course, avec une même ligne d'arrivée.

La voiture A roule à 37km/h et se trouve à 402km de la ligne d'arrivée.
La voiture B roule à 46km/h et se trouve à 324km de la ligne d'arrivée.

Chaque heure (ou minute, ou seconde, ou par (k)m parcouru, bref, en continu), les deux voitures ralentissent selon une formule applicable à chaque voiture se servant des données/valeurs disponibles : distance restante, distance totale parcourue, distance parcoure de t-1 à t, vitesse actuelle, vitesse à t0 ou t-1, etc...

Les voitures doivent atteindre la ligne d'arrivée en même temps et à la même vitesse.
Sachant que la vitesse d'une voiture au temps "t" n'est jamais la même qu'à t-1 ou t+1 (Le ralentissement doit être assez "fluide", la voiture B ne peut pas juste ralentir une fois brusquement en fonction de la voiture A puis continuer sa route à vitesse constante).


Je sais que la voiture B devra davantage ralentir que la voiture A (forcément), mais je sèche pour trouver une formule.

Merci d'avance !



GaBuZoMeu
Habitué(e)
Messages: 6020
Enregistré le: 05 Mai 2019, 10:07

Re: Course et ralentissement

par GaBuZoMeu » 12 Juin 2019, 08:15

L'utilisation de courbes de Bézier cubiques te permettra de résoudre facilement ton problème, avec une solution facile à mettre en oeuvre. On se place bien sûr dans le plan avec le temps en abscisse et la distance en ordonnée. Il y a juste besoin d'un petit peu de réflexion pour le choix des points de contrôle. On choisit les mêmes deux dernier points de contrôle pour les deux courbes. Les deux premiers points de contrôle sont pratiquement imposés par les données initiales.
Comme j'aime bien laisser un petit peu de réflexion, je n'en dis pas plus.

Je me contente de joindre une figure réalisée avec GeoGebra. On y voit les trajectoires de A et B : la concavité des courbes indique la décélération. Je peux régler le temps de parcours en déplaçant le point de contrôle A_4 sur l'axe des abscisses (l'axe du temps), j'ai des curseurs v qui me permet de régler la vitesse d'arrivée, s qui influe sur la forme des courbes en déplaçant les points de contrôle 2 et 3 et t qui me permet de faire bouger A et B sur les courbes.
Les points de contrôle pour la trajectoire de A sont A_1, A_2 , A_3, A_4 et ceux pour la trajectoire de B sont B_1, B_2 , A_3, A_4

Image

MakMak1
Messages: 5
Enregistré le: 11 Juin 2019, 22:11

Re: Course et ralentissement

par MakMak1 » 12 Juin 2019, 09:45

Merci pour ta réponse !

Je n'ai jamais entendu parler de la courbe de Bézier mais si j'ai bien compris :

Admettons que les ordonnées soient les kilomètres parcourus, les abscisses le nombre d'heures écoulés, et la "vitesse" les km/h.

Soit le point de contrôle P3 aux coordonnées (tx, 0), commun aux deux courbes.
Le point de contrôle P2 aux coordonnées (tx - 1, - vitesse finale.) Commun également aux deux.
"tx" étant le temps d'arrivée.

Le point de contrôle P0 de A aux coordonnées (t0, - distance entre la voiture A et la ligne d'arrivée).
Le point de contrôle P0 de B aux coordonnées (t0, -distance entre la voiture B et la ligne d'arrivée).

Le point de contrôle P1 de A aux coordonnées (t1, P0 de A + vitesse initiale de la voiture A).
Le point de contrôle P1 de B aux coordonnées (t1, P0 de B + vitesse initiale de la voiture B).


Après, il existe une formule :
P(t)=(1-t)^3*P0+3t*(1-t)^2*P1+3t^2*(1-t)*P2+t^3*P3

Et je suppose que chaque heure, une voiture avance donc de P(t) - P(t-1).

Mais ça me parait curieux car à t = 1, ça voudrait dire que P(t) = P3 pour les deux voitures ?
Quelque chose m'échappe, dans mon problème précis, de combien de kilomètres les voitures A et B avanceraient la première heure si par exemple la vitesse finale était de 10 km/h et que la durée de la course était de 19h ?

GaBuZoMeu
Habitué(e)
Messages: 6020
Enregistré le: 05 Mai 2019, 10:07

Re: Course et ralentissement

par GaBuZoMeu » 12 Juin 2019, 10:06

J'ai numéroté mes points de contrôle de 1 à 4.
Mon point de contrôle A_4 est (x(A_4),0) : x(A_4) est la durée du parcours en heures.
Mon point de contrôle A_3 est A_4 - s * (1,v/100) où v est la vitesse d'arrivée en km/h (divisée par 100 parce qu'une unité sur l'axe des ordonnées représente 100 km)
Mon point de contrôle A_1 est (0, -402/100).
Mon point de contrôle A_2 est A_1 + s * (1,37/100).

Je peux régler x(A_4), s et v.

Dans la paramétrisation de la courbe de Bézier, t est un paramètre qui varie de 0 à 1. Attention, il n'est pas le temps écoulé. Le temps écoulé est la première coordonnée de
A = (1_t)^3 * A_1 + 3*t*(1-t)^2 * A_2 + 3*t^2*(1-t) * A_3 + t^3 * A_4
soit
3*t*(1-t)^2 * s + 3*t^2*(1-t) * (x(A_4) - s) + t^3 * x(A_4)

Avec les données que tu proposes, le t correspondant à 1h. est à peu près 0.078 et A est à 368 km du but, B à 285 (pour s=3.7).

MakMak1
Messages: 5
Enregistré le: 11 Juin 2019, 22:11

Re: Course et ralentissement

par MakMak1 » 12 Juin 2019, 10:38

Pardon mais c'est un peu trop abstrait pour moi. Je ne pourrai pas importer directement ce logiciel/graphique dans mon code.

Que représentent t et s concrètement ?

Et surtout, comment parvenir manuellement à ce résultat, et ce le plus simplement possible ?
A est à 368 km du but, B à 285

azertytreza
Membre Relatif
Messages: 163
Enregistré le: 26 Mai 2019, 16:51

Re: Course et ralentissement

par azertytreza » 12 Juin 2019, 10:53

salut (je ne reste pas)

il y a une profusion de documents sur les courbes de Bezier MAIS

ce lien là est de loin le meilleur (essaye de te dépêcher car souvent les bons trucs disparaissent d'internet)
https://www.math.u-psud.fr/~perrin/CAPES/geometrie/BezierDP.pdf

bon courage

GaBuZoMeu
Habitué(e)
Messages: 6020
Enregistré le: 05 Mai 2019, 10:07

Re: Course et ralentissement

par GaBuZoMeu » 12 Juin 2019, 11:13

@MakMak : visiblement tu as un vrai problème qui n'est pas exactement celui que tu as posé. Quel est ce vrai problème ?
Les formules pour les courbes de Bézier sont très simples à implémenter, et sont à la base de nombreuses application graphiques. Je ne vois pas pourquoi tu ne pourrais pas les implémenter dans ton code.
Ça nous ramène à la question : que veux-tu exactement que ton code fasse ? Accessoirement, dans quel langage l'écris-tu ?

GaBuZoMeu
Habitué(e)
Messages: 6020
Enregistré le: 05 Mai 2019, 10:07

Re: Course et ralentissement

par GaBuZoMeu » 12 Juin 2019, 11:58

Tu es peut-être gêné par la relation un peu compliquée qu'il y a entre le paramètre t et le temps écoulé. Il y a un moyen de régler ça, au prix de la perte d'un degré de liberté dans la fabrication d'une solution : ce moyen consiste à fixer s à la valeur x(A_4)/3, de sorte que les abscisses des points de contrôle sont en progression arithmétique : 0, x(A_4)/3, 2*x(A_4)/3, x(A_4).
À ce moment là, le temps écoulé est simplement t*x(A_4) (avec t variant de 0 à 1).

On a alors des formules très simple pour la position, la vitesse et l'accélération de A et de B en fonction du temps écoulé, qu'on peut implémenter dans n'importe quel code.

Avoir perdu un degré de liberté n'est pas tout à fait innocent : on peut très bien perdre des solutions.

aviateur
Habitué(e)
Messages: 3853
Enregistré le: 19 Fév 2017, 10:59

Re: Course et ralentissement

par aviateur » 12 Juin 2019, 12:06

Bonjour
Dans ce genre de problème il y a surement plusieurs solutions. On peut alors chercher une solution explicite en prenant comme accélerations (négative, ici pour A : ) constante pour A et affine pour B (i.e de la forme ). En effet pour B il faut bien qu'à un certain moment sa vitesse soit plus petite que celle de A (notée)
On a donc 3 paramètres a,b,c sans oublier l'instant d'arrivée des 2 véhicules que je note T.

En intégrant on a et connues à partir de leurs dérivées car on connait leurs vitesses initiale à l'instant t=0.
Il reste à écrire les contraintes:




Ces trois équations se résolvent facilement (les calculs sont élémentaires) et il reste donc à déterminer le paramètre T.
Si T est trop petit on va avoir des accélérations positives. Donc il faut choisir T assez grand.
L'idéal c'est de choisir c'est à dire que T est le plus petit possible.
En réfléchissant tu verras que vérifie

Je te laisse faire les calculs et te donne pour info ce que j'ai trouvé.





MakMak1
Messages: 5
Enregistré le: 11 Juin 2019, 22:11

Re: Course et ralentissement

par MakMak1 » 12 Juin 2019, 12:21

@aviateur, merci mais cela dépasse mon niveau, et j'ignore donc totalement comment je pourrais traduire tout cela pour en produire des formules systématiques.

@GaBuZoMeu, la formule de Bézier est effectivement implantable dans mon code (C#) assez facilement. Je crois en effet que ce qui me gêne, c'est que je cherche à calculer une ordonnée (distance parcourue) avec une abscisse (le temps écoulé) avec une formule qui n'est pas la bonne (t n'étant pas une abscisse, et si j'ai bien compris 0,5 t n'est pas égal à la moitié du temps écoulé).

Je cherche simplement une formule par laquelle f(temps écoulé) = distance parcourue, qui respecte les contraintes énoncées, quitte à ce que la formule contienne des variables ajustables.

Et mon problème concret est très similaire à celui énoncé. C'est juste que ce ne sont pas des voitures. ^^

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

Re: Course et ralentissement

par fatal_error » 12 Juin 2019, 12:45

Bonjour,

je préfère de loin la proposition de gbzm qui au delà de plus de controle, nécessite également moins de transpiration
A défaut, la version ci-dessous (qui ressemble très fortement à celle d'aviateur) a le mérite d'être plus intuitive..

v1_i, v2_i les vitesses initiales, v_e la vitesse d'arrivée et t_e le temps écoulé pour atteindre v_e


Code: Tout sélectionner
    +
    |
v2_iX
    |X
    |XX
    | XX
v1_iX  XX
    |OOOXXO
    |    XXOOO
    |      XXXOOOO
    |        XXXX OOOOOO
    |           XXXX    OOOOO
    |               XXXXX    OOOOOO
v_e |                    XXXXXXXXXXOOO
    |                             XXXXX
    +------------------------------------->
    t0                                  te


La distance parcourue est __l'aire__ sous la courbe
On remarque que la courbe de v1 intersecte la courbe de v2 (pour "compenser" les aires)

en prenant arbitrairement leq de v1 de la forme
on a
(ordonnée à l'origine...)


pour on peut poser (toujours arbitrairement)
et pour pas s'embêter avec le fait que pourrait changer de sens de variation,
on déduit:

idem

en , on déduit

en ,


d'où


on cherche alors et en égalisant les distance:

aire v_1 = aire v_2 + 78
t_e/2(v_e + v1_i) = 78 + t_e/3(v2_i+2v_e)
d'où

pour positif, il faut alors
idem
v_e < 3v1_i - 2v2_i

ici tu poses le que tu veux, sous reserve que (avec les cond, v_2 < 19)

on remplace alors et dans et pour connaitre la vitesse en t
les distances _parcourues_ étant respectivement




ex d'AN sous octave
Code: Tout sélectionner
1;
clear;
v1_0 = 37
v2_0 = 46


ve = 1; % chose ve < 3v1-2v2==19
te = 78*6 / (-ve + 3*v1_0 - 2*v2_0)


global a2 = (v2_0-ve)/te^2;
global b2 = -2*(v2_0-ve)/te;
global c2 = v2_0;

function y = v2(x)
    global a2;
    global b2;
    global c2;
    y = a2*x^2 + b2*x + c2;
endfunction
d2 = quad('v2',0,te)
d2calc = te * (v2_0/3+2*ve/3)


global a1 = (ve - v1_0)/te;
global b1 = v1_0;
function y = v1(x)
    global a1;
    global b1;
    y = a1*x + b1;
endfunction

d1 = quad('v1',0,te)
d1calc = te * (ve/2+v1_0/2)

left = te/2*(ve+v1_0)
right = te/3*(v2_0+2*ve) + 78
la vie est une fête :)

GaBuZoMeu
Habitué(e)
Messages: 6020
Enregistré le: 05 Mai 2019, 10:07

Re: Course et ralentissement

par GaBuZoMeu » 12 Juin 2019, 12:55

Il y a tout de même une petit chose embêtante avec le calcul d'aviateur : sauf erreur, on arrive au temps T avec une vitesse négative ... A et B reviennent sur leurs pas.

Je donnerai des formules explicites utilisant les courbes de Bézier (pas très dure à trouver). mais là, j'ai un séminaire que je ne veux pas louper.

aviateur
Habitué(e)
Messages: 3853
Enregistré le: 19 Fév 2017, 10:59

Re: Course et ralentissement

par aviateur » 12 Juin 2019, 13:06

GaBuZoMeu a écrit:Il y a tout de même une petit chose embêtante avec le calcul d'aviateur : sauf erreur, on arrive au temps T avec une vitesse négative ... A et B reviennent sur leurs pas.

Je donnerai des formules explicites utilisant les courbes de Bézier (pas très dure à trouver). mais là, j'ai un séminaire que je ne veux pas louper.

Exact j'ai oublié cette dernière condition. J'ai pas trop envie de chercher davantage vu que la solution semble compliquée pour le posteur de la question (mais je vois pas en quoi c'est compliqué).
Mais ça veut peut être dire dire qu'il n'y a pas de solution dans l'espace pour les accélérations. Il faut alors chercher la solution dans un espace + grand

GaBuZoMeu
Habitué(e)
Messages: 6020
Enregistré le: 05 Mai 2019, 10:07

Re: Course et ralentissement

par GaBuZoMeu » 12 Juin 2019, 14:28

Je commence par donner la formule explicite.
Je note les données : distance de au but à l'instant initial, vitesse initiale de , vitesse à l'arrivée, temps de parcours.
La position de en fonction du temps est :



Ça fait bien pour et pour .

La vitesse et l'accélération s'obtiennent bien sûr en dérivant par rapport à . On a bien sûr la même formule pour en remplaçant les données initiales et par et .

Attention, cette formule ne donne pas forcément une solution. Par exemple avec les données initiales fournies, =19h et =10 km/h, on constate qu'après une phase de décélération, B réaccélère un peu.

Image

Par contre en gardant =19h et en prenant =2km/h, ça marche.

Image

Si on avait gardé le degré de liberté sur le paramètre , on avait une solution avec vitesse d'arrivée 10km/h en prenant par exemple (au lieu du imposé)

Image

aviateur
Habitué(e)
Messages: 3853
Enregistré le: 19 Fév 2017, 10:59

Re: Course et ralentissement

par aviateur » 12 Juin 2019, 15:05

Rebonjour
Avec mes calculs, il me semble bien que si on cherche une solution dans
(c'est à dire v_A et V_B polynômes de degré 2), il n'y a pas de solution telle que (v_A)' et (v_B)' restent constamment négatives.
C'est à dire que je ne suis pas étonné que pour B on doit ré-accélérer à un certain moment.
Est ce qu'en augmentant le degré degré le problème peut être résolu?
Perso je stoppe les calculs car sa demande un peu + de travail. Mais je ne sais pas si on peut augmenter le degré avec geogebra.

GaBuZoMeu
Habitué(e)
Messages: 6020
Enregistré le: 05 Mai 2019, 10:07

Re: Course et ralentissement

par GaBuZoMeu » 12 Juin 2019, 15:21

On peut faire des courbes de Bézier quartiques, ou quintiques etc., bien sûr (il suffit de rentrer les formules dans GeoGebra).
Mais avec les courbes de Bézier cubiques que j'ai utilisées, les vitesses sont bien des polynômes de degré 2 en le temps (si les points de contrôle ont leurs abscisses régulièrement espacées), et le dessin du milieu dans le message ci-dessus montre qu'il y a bien une solution, avec vitesse terminale égale à 2km/h

aviateur
Habitué(e)
Messages: 3853
Enregistré le: 19 Fév 2017, 10:59

Re: Course et ralentissement

par aviateur » 12 Juin 2019, 15:36

Oui mais avec une accélération à un certain moment pour B?

GaBuZoMeu
Habitué(e)
Messages: 6020
Enregistré le: 05 Mai 2019, 10:07

Re: Course et ralentissement

par GaBuZoMeu » 12 Juin 2019, 15:38

Non. La courbe verte est bien concave dans le deuxième dessin.

aviateur
Habitué(e)
Messages: 3853
Enregistré le: 19 Fév 2017, 10:59

Re: Course et ralentissement

par aviateur » 12 Juin 2019, 17:22

Rebonjour
D'accord ça marche. Alors je trouve comme temps optimal (minimal) 14.11 heures avec v=11.42 km/h.
Il faudrait voir si on peut le voir avec Geogebra.






Avatar de l’utilisateur
Dattier
Membre Relatif
Messages: 105
Enregistré le: 06 Juin 2019, 01:55

Re: Course et ralentissement

par Dattier » 12 Juin 2019, 18:49

Bonjour,

Cela fait plaisir de voir qu'on est meilleur que la concurence :

http://www.les-mathematiques.net/phorum ... ?4,1823904

:mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen:

 

Retourner vers ⚔ Défis et énigmes

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 11 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite