1

Quel est l'equivalent en C de ces fonctions??

2

asin / acos / atan

3

C'étais aussi simple que ca?
Merci d'avoir repondu si vite

4

J'essaye de convertir un prog de rotation en C et ca marche pas alors qu'en basic ca marche Pourkoi?


BASIC:


(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

C:

// C Source File
// Created 02/12/01; 15:57:33

#define OPTIMIZE_ROM_CALLS // Use ROM Call Optimization

#define SAVE_SCREEN // Save/Restore LCD Contents

#include <tigcclib.h> // Include All Header Files

short _ti89; // Produce .89Z File
short _ti92plus; // Produce .9XZ File
short x;
short y;
short c;
short d;
short teta;
short r;
short ang=90;
short show_picvar(char *SymName, short x, short y, short Attr)
{
SYM_ENTRY *sym_entry = SymFindPtr(SymName, 0);
if (!sym_entry) return FALSE;
if (peek(HToESI (sym_entry->handle)) != PIC_TAG) return FALSE;
BitmapPut(x, y, HeapDeref (sym_entry->handle) + 2, ScrRect, Attr);
return TRUE;
}
void _main(void)
{
ESI argptr;
short argtype = 0;
argptr = top_estack;
argtype = GetArgType(argptr);
ClrScr();
if (argtype != STR_TAG)
{
DlgMessage("ERREUR!","Argument inexistant ou d'autre type que 'str'",BT_OK,BT_NONE);
goto fin2;
}
if(show_picvar(GetSymstrArg(argptr),0,0,A_NORMAL)==FALSE)
{
goto erreur;
}
goto fin;
erreur:
DlgMessage("ERREUR!","l'image n'existe pas",BT_OK,BT_NONE);
goto fin2;
fin:
for (x=0;x!=50;x++)
{
for (y=0;y!=50;y++)
{
if(GetPix(x,y)==1)
{
r=sqrt((x*x)+(y*y)));
teta=asin((y/r)*3.14/180);
teta=teta+ang;
c=r*cos(teta*3.14/180);
d=r*sin(teta*3.14/180);
DrawPix(d+50,c+50,A_NORMAL);
}

}
}
ngetchx();
fin2:

}

Merci de m'eclairer rapidement

5

Déjà, remplace 3.14 par PI ou par 3.1415926535898 .

Correction: Le dernier chiffre est un 8, pas un 7, parce que c'est ...58979... Désolé pour l'erreur. Et c'est inutile de mettre plus de chiffres que ça: le format BCD de TI est limité à 14 chiffres significatifs de toute façon.
[edit]Edité par Kevin Kofler le 04-12-2001 à 21:27:05[/edit]
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é

6

Ensuite fait if (Getpix(x,y)) // Ca ne vaut pas un mais TRUE ou FALSE

7

Pour pi le problème n'est pas là ça devrait marcher quand même.
Sinon pour getpix je l'ai toujours utillisé comme ça et ça a toujours marché.
Je pense que je vais laisser tomber cette méthode et faire des tables de cosinus et sinus mais j'aimerais bien trouver mon erreur.
sad

8

Je suis certain que le problème ne vient pa de l'affichage de l'image mais de l'algorithme de rotation mais je ne sais pas ou

9

Vire quand-même le ==1 pour le GetPix. C'est faux.
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é

10

Transforme toutes tes variables short en float. Et pkoi t'as un x3.14/180 ? Pour convertir ? Mais n'est-ce pas deja au bon format ?

11

Au fait, j'ai trouvé une erreur grave:
teta=asin((y/r)*3.14/180);
Déjà les parenthèses sont mal placées, et puis la conversion est effectuée à l'envers. Correct:
teta=asin(y/r)*(180./PI);

Mets aussi tes 3.14/180 entre parenthèses: ... *(PI/180.). Ça permettra au compilateur d'en faire une constante et de supprimer un calcul en virgule flottante.
[edit]Edité par Kevin Kofler le 06-12-2001 à 22:01:38[/edit]
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 réponse je vais tester si ca marche maintenant
J'avais pas vupour l'erreur de conversion
De toute facon je vais faire une table de cosinus et de sinus pour + de rapidité

13

Je viens d'essayer et ca marche toujours pas
il s'affiche des traid sur l'ecran mais ca ressemble a rien
Revoile le code modifié:

// C Source File
// Created 02/12/01; 15:57:33

#define OPTIMIZE_ROM_CALLS // Use ROM Call Optimization

#define SAVE_SCREEN // Save/Restore LCD Contents

#include <tigcclib.h> // Include All Header Files

short _ti89; // Produce .89Z File
short _ti92plus; // Produce .9XZ File
short x;
short y;
short c;
short d;
short teta;
short r;
short ang=90;
short show_picvar(char *SymName, short x, short y, short Attr)
{
SYM_ENTRY *sym_entry = SymFindPtr(SymName, 0);
if (!sym_entry) return FALSE;
if (peek(HToESI (sym_entry->handle)) != PIC_TAG) return FALSE;
BitmapPut(x, y, HeapDeref (sym_entry->handle) + 2, ScrRect, Attr);
return TRUE;
}
void _main(void)
{
ESI argptr;
short argtype = 0;
argptr = top_estack;
argtype = GetArgType(argptr);
ClrScr();
if (argtype != STR_TAG)
{
DlgMessage("ERREUR!","Argument inexistant ou d'autre type que 'str'",BT_OK,BT_NONE);
goto fin2;
}
if(show_picvar(GetSymstrArg(argptr),0,0,A_NORMAL)==FALSE)
{
goto erreur;
}
goto fin;
erreur:
DlgMessage("ERREUR!","l'image n'existe pas",BT_OK,BT_NONE);
goto fin2;
fin:
for (x=0;x!=50;x++)
{
for (y=0;y!=50;y++)
{
if(GetPix(x,y))
{
r=sqrt((x^2)+(y^2));
teta=asin(y/r)*(180/PI);
teta=teta+ang;
c=r*cos(teta*(PI/180));
d=r*sin(teta*(PI/180));
DrawPix(d+50,c+50,A_NORMAL);
}

}
}
ngetchx();
fin2:

}

14

j'ai dit de transformer tes variables en float !
Surtout r, teta et angle !

15

Ecoute le maitre , jeune apprenti !
"I read the game.dll assembly more easily than you read the joke on the back of your box of Cocoa Pebbles, and have spent the past 2 1/2 years navigating it." ©

16

Argh, encore une erreur très grave: x^2 veut dire x XOR 2 en C! Il faut écrire x*x. (Sinon, pour les puissances générales, c'est pow(x,n), mais x*x est bien plus rapide que pow(x,2).)

Et puis:
- Si tu utilises des floats, pas besoin de passer par les degrés.
- C'est quoi ça, teta=teta+ang? Ce n'est pas faux, mais en C, on écrit plutôt teta+=ang.
[edit]Edité par Kevin Kofler le 07-12-2001 à 19:18:40[/edit]
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é

17

merci encore, je vous tiens au courant si ca marche pas

18

Ca y est ca marche mais l'image n'est pas claire, elle est toute tremblotante pourkoi?
Quelle est la methode pour que l'image soit nette?

19

Probablement utiliser des variables de type float plutôt que short.
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é

20

Ca marche parfaitement mais c'est tres lent pour obtenir des rotations fluides, meme avec des tables de sinus et cosinus.
Quelkun a pas une méthode plus rapide ou une routine en ASM?