En PHP, je n'ai pas de fonction toute prête.
La seule méthode que je vois consiste à découper l'intervalle [0,1] de t en N points, de calculer le point de la courbe de Bézier correspondant à t_i, et de faire ensuite une interpolation; donc, cela revient à approximer la courbe de Bézier par une ligne brisée dont les sommets sont les points de la courbe, aux paramètres t=i*P avec P le pas du calcul (1/N où N est le nombre de points voulus) et i l'index/numéro du point.
Si tu mets du pseudo-aléatoire, tu n'auras pas besoin de stocker la carte complète en BDD: seuls les points de contrôles seront stockés.
Par exemple, si au lieu d'utiliser un random() tu utilises la fonction sinus (avec une amplitude, une phase et une fréquence fixées), alors tu auras des variations de valeur qui ne seront pas aléatoires, mais qui seront calculables par n'importe qui (client ou serveur). Tu allègeras énormément la BDD, à condition que le serveur n'ai pas besoin de calculer la position des objets de nombreuses fois.
Par exemple, si le serveur doit calculer la position de tous les objets environnants pour savoir si le joueur courant peut voir un autre joueur avant de l'attaquer, alors il vaut mieux stocker la position des objets en BDD (sinon, ce serait lourd à calculer car ce calcul implique de nombreux objets et doit être souvent fait).
Sinon, si le calcul de position des objets n'est pas courant, ou s'il est fait pour 1 objet de temps en temps (par exemple, il est fait pour l'objet que le joueur veut activer), alors cette méthode sera probablement intéressante.
Il est possible de complexifier la fonction pseudo-aléatoire, soit en prenant un mersenne twister avec un seed précis et fixe (mais il faut alors que javascript ET PHP, aka que les langages utilisés, aient le même MT implémenté). Sinon, une somme de sinus à base/amplitude/phase/fréquences différentes sera suffisante.
Patron de fonction pseudo-aléatoire simple:
Un exemple live (rafraichir/F5 pour obtenir une nouvelle fonction) de ce que donne une telle fonction pseudo-aléatoire.
La période d'une fonction de cette structure-là est très difficile à calculer, dès l'instant où les fréquences des sinus et leur phase ne sont pas multiple les uns des autres.
Avec de telles fonctions, il y a quelques avantages:
La seule méthode que je vois consiste à découper l'intervalle [0,1] de t en N points, de calculer le point de la courbe de Bézier correspondant à t_i, et de faire ensuite une interpolation; donc, cela revient à approximer la courbe de Bézier par une ligne brisée dont les sommets sont les points de la courbe, aux paramètres t=i*P avec P le pas du calcul (1/N où N est le nombre de points voulus) et i l'index/numéro du point.
Si tu mets du pseudo-aléatoire, tu n'auras pas besoin de stocker la carte complète en BDD: seuls les points de contrôles seront stockés.
Par exemple, si au lieu d'utiliser un random() tu utilises la fonction sinus (avec une amplitude, une phase et une fréquence fixées), alors tu auras des variations de valeur qui ne seront pas aléatoires, mais qui seront calculables par n'importe qui (client ou serveur). Tu allègeras énormément la BDD, à condition que le serveur n'ai pas besoin de calculer la position des objets de nombreuses fois.
Par exemple, si le serveur doit calculer la position de tous les objets environnants pour savoir si le joueur courant peut voir un autre joueur avant de l'attaquer, alors il vaut mieux stocker la position des objets en BDD (sinon, ce serait lourd à calculer car ce calcul implique de nombreux objets et doit être souvent fait).
Sinon, si le calcul de position des objets n'est pas courant, ou s'il est fait pour 1 objet de temps en temps (par exemple, il est fait pour l'objet que le joueur veut activer), alors cette méthode sera probablement intéressante.
Il est possible de complexifier la fonction pseudo-aléatoire, soit en prenant un mersenne twister avec un seed précis et fixe (mais il faut alors que javascript ET PHP, aka que les langages utilisés, aient le même MT implémenté). Sinon, une somme de sinus à base/amplitude/phase/fréquences différentes sera suffisante.
Patron de fonction pseudo-aléatoire simple:
⅀(Base[i] + Amplitude[i]*sin(Frequence[i] * x + Phase[i]))
Un exemple live (rafraichir/F5 pour obtenir une nouvelle fonction) de ce que donne une telle fonction pseudo-aléatoire.
La période d'une fonction de cette structure-là est très difficile à calculer, dès l'instant où les fréquences des sinus et leur phase ne sont pas multiple les uns des autres.
Avec de telles fonctions, il y a quelques avantages:
- La moyenne de la fonction est la somme des "bases"
- La période est quasi-infinie si les fréquences et les phases ne sont pas multiples les unes des autres
- Elle est très portable (beaucoup de langages peuvent l'implémenter... à part XSL >.>)
- Sa valeur absolue ne peut dépasser la somme des valeurs absolues des amplitudes