1

1-Comment fais-t-on pour faire des racines carrées en C?
(J'ai cherché et j'ai pas trouvé, meis je m'en sort avec de puissance 1/2!)
2-Comment fais t'on pour avoir un cosinus en degré(ou sinus...)?

Merci d'avance pour vos réponses...
(je fais un programme de rotation de sprite en C qui est un peu lent en basic)

2

>1-Comment fais-t-on pour faire des racines carrées en C?

Fonction sqrt (square root : racine carrée)

>2-Comment fais t'on pour avoir un cosinus en degré(ou sinus...)?
Tu as un angle en degré, tu le multiplies par PI/180, et tu lui appliques la fonction cosinus ou sinus.

3

Si c'est en arithmétique fixe, je peux t'aider pour la racine carrée wink
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

4

Houla, utiliser de la racine carrée pour faire une rotation de sprite, c mauvais plan...
Et fait toi des tables de cos et sin plutôt.

5

Regarde aussi le tutorial S1P8 de Thomas Nussbaumer ( tict.ticalc.org ).
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

6

Je fais un programme de rotation de sprites en passant par les coordonnées polaires
J'utillise donc la racine carrée pour calculer r et les cosinus pour "theta", ensuite je change l'angle obtenu par incrémentation et je retransforme en coordonnées (x,y)

Est ce qu'il y a une méthode + rapide?

En basic ca donne ca:
(theta = o)
Prgm
setMode("Angle","DEGREE")
InputStr "image 40x40",img
Input "angle de rotation",ang
ClrDraw
RclPic #img,0,0
For a,1,40
For b,1,40
If pxlTest(a,b)=true Then
"racine carree"(a^2+b^2)->r
cos-1(a/r)->o
o+ang->o
round(r*cos(o)+50,0)->c
round(r*sin(o)+50,0)->d
PxlOn c,d
EndIf
EndFor
EndFor
EndPrgm

7

Il y a mieux: il suffit de multiplier a+ib par e^(i*ang) pour obtenir c+id.
En découpant:
(a+ib)e^(i*ang)=c+id
(a+ib)(cos(ang)+i sin(ang))=c+id
a cos(ang) + i a sin(ang) + i b cos(ang) - b sin(ang)=c+id
a cos(ang) - b sin(ang) + i (a sin(ang) + b cos(ang))=c+id
Donc:
c = a cos(ang) - b sin(ang)
d = a sin(ang) + b cos(ang)
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

8

Mais ca c'est plutôt pour rotationner un pxl, pas un sprite.

9

C'est bien pratique la géométrie complexe ...
> ExtendeD : Mais ca c'est plutôt pour rotationner un pxl, pas un sprite
Oui, mais si tu le fais pour tous les points du sprite ... wink

10

Ouais, c quand même pas comme ça qu'on fait une routine de rotation de sprite optimisée.

11

>ZdRUbAl: Oui, mais si tu le fais pour tous les points du sprite ...

Ou plutôt si on applique la rotation réciproque à tous les points de la destination et qu'on regarde à quel point du sprite ils correspondent. (Ça donne un résultat bien meilleur.)
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

12

Merci pour vos reponses, mais je n'ai pas bien compris la technique dee kevinconfus

13

> Kevin: Ou plutôt si on applique la rotation réciproque à tous les points de la destination et qu'on regarde à quel point du sprite ils correspondent. (Ça donne un résultat bien meilleur.)

Pour ne pas faire trop d'erreurs d'arrondis ?

14

Non, pour éviter de traîter certains pixels de la destination plusieurs fois et en oublier d'autres.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité