Courbe sinusoïdale entre deux points

Courbe sinusoïdale entre deux points - Algo - Programmation

Marsh Posté le 18-01-2016 à 21:13:17    

Bonjour,
 
Dans le cadre d'un jeu, j'essaie actuellement de générer un plan qui va dans une seule direction et dont l'élévation varie de temps en temps.
En gros, on peut considérer les choses en 2D et simplement voire une courbe qui, de temps en temps, monte ou descend en suivant une forme sinusoïdale.
J'espère que c'est clair  :??:  
 
L'objectif c'est donc d'avoir une fonction qui retourne une valeur y pour un x donné. En générale y ne varie pas et, de manière aléatoire, on génère une variation de l'élévation.
 
Etant donné que je veux une forme sinusoïdale entre deux élévation de la courbe, j'utilise un sinus() auquel je passe un angle qui varie de PI+PI/2 à PI/2. Ca représente exactement la portion de courbe que je veux reproduire.
 
Bref, un exemple en JS de ce que j'ai pondu pour passer d'une élévation à l'autre avec une belle courbe :
 

Code :
  1. var angle = {
  2.    from: Math.PI + Math.PI/2,
  3.    to: Math.PI/2
  4. }
  5.  
  6. var elevation = {
  7.    from: 100,
  8.    to: 0,
  9.    tilt: 0.1 // inclinaison
  10. }
  11.  
  12. for (var i = angle.from; i > angle.to; i -= elevation.tilt)) {
  13.    console.log( elevation.from + (1 + Math.sin(i)) * (elevation.to - elevation.from) / 2 );
  14. }
  15.  
  16. console.log(elevation.to);


 
Ce code log donc les différents point de la courbe entre les deux élévations données. Ça marche très bien.
Ceci-dit, je me demandais s'il quelqu'un ne voyais pas quelques optimisations à faire ? Je trouve ça étrangement compliqué pour ce que je veux faire.
 
C'est que je serai assez étonné d'avoir trouvé tout seul la meilleur solution tant je ne suis pas à l'aise avec ce genre de calculs.
 
Merci !
 
PS : Je poste en Algo parce que, après tout, que je propose une implémentation en JS ce n'est pas vraiment important.


Message édité par dwogsi le 18-01-2016 à 21:14:41

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 18-01-2016 à 21:13:17   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed