Je ne comprend pas ce que tu veux faire et ce qu´est sensée calculer ta fonction.
Si tu veux calculer des coordonées x et y et que tu sais que ton mouvement se passe sur un cercle, tu peux utiliser des complexes :
Ton point M est représenté par l´affixe z = x + iy = R.exp(i.théta)
Et ici, R c´est bien evidemment ton rayon, et théta ce que tu appelle ton angle.
Après, pour retrouver ton x et ton y, c´est de la trigo toute bete.
z = R.exp(i.théta) = R[cos(théta) + i.sin(théta)]
Et toi tu voudrais z de la forme z = x+iy.
En identifiant, tu trouves
x = R.cos(théta)
et y = R.sin(théta)
Donc tes formules me sembles bonnes (je sais pas pourquoi je suis partis dans la démo de ca
Par contre, je ne comprend pas pourquoi tu veux enlever PI/2.
Avec mon passage par les complexes, tu vois bien que théta c´est l´angle formé par (Ox) et OM, peut importe s´il est supérieur à PI/2.
D´ailleurs, à la rigueur, j´aurais compris ton erreur si tu voulais retrancher PI ( tu aurais alors voulu prendre l´angle aigu, et laisser l´optus, mais ca ne marcherait pas quand meme acr c´est pas ce qu´il faut).
Le seul truc que tu peux faire c´est :
float temporaire = théta/(2PI);
theta = theta - static_cast<int> (temporaire);
// Tu enleve des tours de cercle complets de 2PI car sin et cos sont periodiques de 2PI.
Mais d´ailleurs faire ceci est superflue : peut importe si ton angle est supérieur à 2PI et que plusieurs tours sont faits : les calculs des sin et des cos seront bon quand meme !
Donc en clair R.cos (théta) et R.sin(théta) devraient marcher.
Reste à voir comment tu va te servir de cette fonction, et comment tu va determiner le théta que tu passeras à chaque appel...
Bonne soirée.