img
@_ö
(11:42)  Bienvenue ! - Inscrivez vous pour poster ! -
@Boo + 42 inconnu(s)

Login :  Mot de passe :      Se souvenir de moi.  Mot de passe perdu ?
/!\:: Cliquez ici pour vous inscrire et poster, créer des sujets ou des forums ! ::/!\
 « - 1/3 - Suivant » :: Pages
 Index » Forum informatique & développement :: Forum Ti 89, Titanium / 92+ / Voyage 200 et TI-Nspire » Algorithmie et optimisation (69r) » Comment sont fait vos routines de cercles?
./Post de départ - Comment sont fait vos routines de cercles?
21.02.2002 - 997
12:03  mastergb1 - Posté : 28-02-2003  M

Bon voila en ce moment j'ai un cours d'image de synthese et les premiers TP etait sur l'affaichage d'une ligne par l'algorithme de brenstein... et aussi des cercles..
Et j'ai etait tres surpris que l'algorithme ne comportait aucun calcul de cosinus ou sinus juste deux equation du premier ordre et le resultat est stupéfiant!!!
Un cercle parfait #eek# !
Donc j'aurais aimé savoir si cette methode est utilsé sr ti?
Sinon ben va falloir que je la porte ca doit etre une des plus rapide (en tout ca c'est la methode utilsé par opengl!


Si dieux existe alors Armin van Buuren en est 1!!
Pour me contacter sur msn:mastergb@hotmail.com
./Publicité AdSense
./1
21.02.2002 - 997
12:04  mastergb1 - Posté : 28-02-2003  M

Bon voila l'algo en C (sous glut)


void MidPointCircleAlgo(int x0, int y0, int r)
{
/* x0 abscisse centre du cercle */
/* y0 ordonnee centre du cercle */
/* r rayon du cercle */

int x,y,d;
glBegin(GL_POINTS);
x = 0 ;
y = r ;
d = 1 - r ;
plot(x+x0,y+y0);
plot(y+x0,x+y0);
plot(y+x0,-x+y0);
plot(x+x0,-y+y0);
plot(-x+x0,-y+y0);
plot(-y+x0,-x+y0);
plot(-y+x0,x+y0);
plot(-x+x0,y+y0);
while ( y > x )
{
if ( d < 0 )
d += 2 * x + 3 ;
else
{
d += 2 * (x - y) + 5 ;
y-- ;
}
x++ ;
plot(x+x0,y+y0);
plot(y+x0,x+y0);
plot(y+x0,-x+y0);
plot(x+x0,-y+y0);
plot(-x+x0,-y+y0);
plot(-y+x0,-x+y0);
plot(-y+x0,x+y0);
plot(-x+x0,y+y0);
}

glEnd();

}


Si dieux existe alors Armin van Buuren en est 1!!
Pour me contacter sur msn:mastergb@hotmail.com
./2
21.02.2002 - 997
12:07  mastergb1 - Posté : 28-02-2003  M

Je vous enverrez l'exe pour voir le resultat!


Si dieux existe alors Armin van Buuren en est 1!!
Pour me contacter sur msn:mastergb@hotmail.com
./3
25.06.2001 - 11921
13:28  nEUrOO - Posté : 28-02-2003  @_ö

Voici XCercle, tirée de la source de XLib:
L'algo doit être une poil plus rapide...

 
void XCercle(short ctrx, short ctry, short rayon, short color) 
{ 
   short chgmt, xx, yy,zz; 
   xx = 0; 
   yy = rayon; 
   zz = 0; 
   chgmt = -rayon; 
 
   do { 
	 XGPxlPut(ctrx+xx, ctry+yy, color); 
	 XGPxlPut(ctrx-xx, ctry+yy, color); 
	 XGPxlPut(ctrx-xx, ctry-yy, color); 
	 XGPxlPut(ctrx+xx, ctry-yy, color); 
	 XGPxlPut(ctrx+yy, ctry+xx, color); 
	 XGPxlPut(ctrx-yy, ctry+xx, color); 
	 XGPxlPut(ctrx-yy, ctry-xx, color); 
	 XGPxlPut(ctrx+yy, ctry-xx, color); 
	  
	 if ((chgmt += (xx++) + xx) >= 0) 
	 { 
	  zz = yy--; 
	  chgmt -= zz + yy; 
	 } 
 
   }while (xx <= yy); 
} 


./4
11.06.2001 - 650
13:37  paxal - Posté : 28-02-2003  M

c'est clair que c'est assez impressionnant. Soit dit en passant, ca marche aussi pour les ellipses


Cours et tutos Asm: http://membres.lycos.fr/sirryl
./5
25.06.2001 - 11921
13:44  nEUrOO - Posté : 28-02-2003  @_ö

oué, mais avec 4 points :) d'ailleurs si tu veux mastergb pour l'ellipse, j'ai aussi idem, pour XLib :) ...


./6
21.02.2002 - 997
14:07  mastergb1 - Posté : 28-02-2003  M

J'ai des doutes sur la qualité du cercle avec cet algo!
Mais je vais essayer...


Si dieux existe alors Armin van Buuren en est 1!!
Pour me contacter sur msn:mastergb@hotmail.com
./7
25.06.2001 - 11921
14:16  nEUrOO - Posté : 28-02-2003  @_ö

Ben je n'ai pas de doute moi, ca marche parfaitement !


./8
21.02.2002 - 997
14:24  mastergb1 - Posté : 28-02-2003  M

Sur Ti ca marche :D
Pas sur PC!
Sur PC c'est pas bon quand le cercle est trop grand!


Si dieux existe alors Armin van Buuren en est 1!!
Pour me contacter sur msn:mastergb@hotmail.com
./9
25.06.2001 - 11921
14:27  nEUrOO - Posté : 28-02-2003  @_ö

heurf, ca bug a partir de combien ?


./10
21.02.2002 - 997
14:29  mastergb1 - Posté : 28-02-2003  M

Attend je regarde a peu pres....
Mais le je suis encore en synthese et je suis sur le clipping de droite par fenetrage de polygone!!!!
Algorithme cyrus et beck #sick#


tres tres lourd....
Et dur aussi.


Si dieux existe alors Armin van Buuren en est 1!!
Pour me contacter sur msn:mastergb@hotmail.com
./11
11.11.2001 - 109137
14:29  @vince - Posté : 28-02-2003  M

ça fait une espèce d'octogone ça non ?


Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // http://www.yaronet.com/posts.php?s=6238
./12
25.06.2001 - 11921
14:34  nEUrOO - Posté : 28-02-2003  @_ö

je pense que ca doit ressembler à ca oué ... mais non fermé je pense


./13
21.02.2002 - 997
14:37  mastergb1 - Posté : 28-02-2003  M

L'algo marche pas du tout sur pc!
Ca foire totalement!


Si dieux existe alors Armin van Buuren en est 1!!
Pour me contacter sur msn:mastergb@hotmail.com
./14
21.02.2002 - 997
14:40  mastergb1 - Posté : 28-02-2003  M

Nan il marche mais il est moin lissé!!!!!!


Si dieux existe alors Armin van Buuren en est 1!!
Pour me contacter sur msn:mastergb@hotmail.com
./15
25.06.2001 - 11921
14:41  nEUrOO - Posté : 28-02-2003  @_ö

OKI, donc ne pas prendre cet algo pour les PC, thx :)


./16
21.02.2002 - 997
14:44  mastergb1 - Posté : 28-02-2003  M

Sisi tu peut le prendre autant pour moa....
Je viens de voir le prof cet algo est applicable qu'a des cercles...
L'algo du haut est utilsable pour toute courbe du type x²+y²=c....
En gros elle est aussi applicable pour les ellipses!


Si dieux existe alors Armin van Buuren en est 1!!
Pour me contacter sur msn:mastergb@hotmail.com
./17
10.06.2001 - 32707
14:44  Kevin Kofler - Posté : 28-02-2003  M

nEUrOne, il y a un bogue dans ton code (ou celui de TiMad)!
if ((chgmt += (xx++) + xx) >= 0)
Tu n'as pas le droit d'utiliser xx++ et xx dans la même expression (dans le même "sequence point")!

Edité par Kevin Kofler le 28-02-2003 à 14:45:12.

Mes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
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é
./18
21.02.2002 - 997
14:46  mastergb1 - Posté : 28-02-2003  M

Ben ca marche tres bien kevin l'algo..
Je viens de tester en opengl...
Vraiment bien..
La difference entre les 2 algos sont minime...


Si dieux existe alors Armin van Buuren en est 1!!
Pour me contacter sur msn:mastergb@hotmail.com
./19
11.11.2001 - 109137
14:51  @vince - Posté : 28-02-2003  M

mastergb1 a écrit :
La difference entre les 2 algos sont minime...

On se doute que le premier doit mettre un chouïa plus de temps à s'exécuter...


Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // http://www.yaronet.com/posts.php?s=6238
./20
21.02.2002 - 997
14:53  mastergb1 - Posté : 28-02-2003  M

Je parle au niveau graphique...
Le premier n'affiche pas que des cercles...
Celui de timad si!

Et les courbes de beziers ya l'equivalent sur ti?


Si dieux existe alors Armin van Buuren en est 1!!
Pour me contacter sur msn:mastergb@hotmail.com
./21
25.06.2001 - 11921
15:17  nEUrOO - Posté : 28-02-2003  @_ö

kk: c le mien, ca marche nickel
mastergb1: j'ai aussi codé pour bezier si tu veux


./22
10.06.2001 - 32707
17:53  Kevin Kofler - Posté : 28-02-2003  M

mastergb1 a écrit :
Ben ca marche tres bien kevin l'algo..

Ça marche très bien par pur hasard! C'est de l'"undefined behavior"! Si ça marche, c'est un coup de chance, pas plus!

Il ne faut pas écrire:
	 if ((chgmt += (xx++) + xx) >= 0)

mais:
	 chgmt += (xx++); 
	 if ((chgmt += xx) >= 0)

ou:
	 chgmt += xx; 
	 if ((chgmt += (xx++)) >= 0)

(selon ce qui était voulu)!!!

(D'ailleurs, la deuxième et la troisième écriture sont toujours à la limite du lisible, mais c'est du C valide contrairement à la première, qui en plus d'être illisible est fausse.)

Edité par Kevin Kofler le 28-02-2003 à 17:55:35.

Mes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
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é
./23
10.06.2001 - 32707
17:59  Kevin Kofler - Posté : 28-02-2003  M

Raisonnement: les 2 écritures ici montrent bien 2 manières possibles d'interpréter ce qu'il y a écrit. Et de plus, le standard C n'oblige nullement le compilateur de choisir une de ces 2 écritures. Il a parfaitement le droit de générer du code qui formate votre disque dur, détruit votre carte mère ou efface votre zone des certificats!

En tout cas, avec du code comme ça, ne venez pas vous plaindre si vos programmes ne marchent plus avec la prochaine version de TIGCC! #bang#


Mes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
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é
./24
10.06.2001 - 21295
21:37  Thibaut - Posté : 28-02-2003  M

:D


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.
./25
25.06.2001 - 11921
13:01  nEUrOO - Posté : 01-03-2003  @_ö

C'est tout de même bien étrange que ca marche parfaitement sous divers compilateurs ... nan ?


./26
10.06.2001 - 21295
17:48  Thibaut - Posté : 01-03-2003  M

Parceque tous ces compilos sont des portages de GCC :p
Et même si ce n'est pas le cas, c'est un coup de chance ! Ton code pourrait tout planter sur d'autres compilateurs qui n'incrémentent pas xx au même "moment".


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.
./27
10.06.2001 - 32707
18:45  Kevin Kofler - Posté : 01-03-2003  M

Thibaut a écrit :
Parceque tous c'est compilos sont des portages de GCC :p

Même des versions de GCC pour des plateformes différentes ou des versions différentes de GCC pour la même plateforme pourraient traîter ça différemment!


Mes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
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é
./28
10.06.2001 - 21295
12:14  Thibaut - Posté : 02-03-2003  M

C'est le "frontend" qui décide "quand" incrémenter ?


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.
./29
30.06.2001 - 50305
12:54  Godzil - Posté : 02-03-2003  M

Se qui me laisse perplexe c que g tjrs lu que le C utilise un ordre de priorité, et lisait de gauche a droite..

Donc :
if ((chgmt += (xx++) + xx) >= 0)

=

1 -> xx++
2 -> chgmt += xx
3 -> chgmt += xx
4 -> chgmt >= 0

Voir plus simple :

1 -> xx++
2 -> chgmt += xx*2
4 -> chgmt >= 0

On pourrait donc changer le code en :

if ((chgmt += ((xx++) * 2 )) >= 0)
ou
if ((chgmt += ((xx++) << 1)) >= 0)




Proud to be CAKE©®™
The cake is a lie! - Love your weighted companion cube

->986-Studio's Wonder Project!<-

./Publicité AdSense
 « - 1/3 - Suivant » :: Pages
 Index » Forum informatique & développement :: Forum Ti 89, Titanium / 92+ / Voyage 200 et TI-Nspire » Algorithmie et optimisation (69r) » Comment sont fait vos routines de cercles?

» yN ©1624 - Aide / Charte / Crédits
20ms | Statistiques