1

Je me décide enfin à rendre public mon modeste algorithme de tracé de lignes perso. Les anciens s'en souviennent peut-être.
Je le destine aux bon programmeurs ASM (je veux dire, aux maniaques de l'optimisation).

Comparé à une implémentation de Bresenham, il est TRES légèrement plus lent. Mais il fait appel deux fois à une division, et comme vous le savez la division est l'instruction la plus lente du M68k... Un bon optimisateur trouvera moyen d'employer des techniques de précalcul et à... dépasser Bresenham ?
void ThibautLine(int x1, int y1, int x2, int y2)
{
  int LongueurSegment;
  int FrequenceSegmentsLongs;
  int CompteurSegmentsLongs= -32;
  int Lx, Ly;
  int xincr, yincr;
  
  
  if (x1 > x2) {xincr= -1; Lx= x1 - x2 + 1;}
          else {xincr=  1; Lx= x2 - x1 + 1;}

  if (y1 > y2) {yincr= -1; Ly= y1 - y2 + 1;}
          else {yincr=  1; Ly= y2 - y1 + 1;}
  
  if (Lx > Ly)
  { // + horiz que vert
    LongueurSegment= (Lx+1) / Ly;     // Ca marche mal sans le '+1', faut qu'on m'explique pk !
    LongueurSegment= xincr >= 0 ? LongueurSegment : -LongueurSegment;
    FrequenceSegmentsLongs= (Lx+1) % Ly;
    FrequenceSegmentsLongs= FrequenceSegmentsLongs ? (Ly << 5) / FrequenceSegmentsLongs : 32767;
    
    y2+= yincr;
    do
    {
      if ((CompteurSegmentsLongs+= 32) >= FrequenceSegmentsLongs)
      {
        CompteurSegmentsLongs-= FrequenceSegmentsLongs;
        x2= x1 + LongueurSegment + xincr;
        do
          PutPixel(x1, y1);
        while ((x1+= xincr) != x2);
      }
      else
      {
        x2= x1 + LongueurSegment;
        do
          PutPixel(x1, y1);
        while ((x1+= xincr) != x2);
      }
    } while ((y1+= yincr) != y2);
  }
  else
  { // + vert que horiz
    LongueurSegment= (Ly+1) / Lx;
    LongueurSegment= yincr >= 0 ? LongueurSegment : -LongueurSegment;
    FrequenceSegmentsLongs= (Ly+1) % Lx;
    FrequenceSegmentsLongs= FrequenceSegmentsLongs ? (Lx << 5) / FrequenceSegmentsLongs : 32767;
    
    x2+= xincr;
    do
    {
      if ((CompteurSegmentsLongs+= 32) >= FrequenceSegmentsLongs)
      {
        CompteurSegmentsLongs-= FrequenceSegmentsLongs;
        y2= y1 + LongueurSegment + yincr;
        do
          PutPixel(x1, y1);
        while ((y1+= yincr) != y2);
      }
      else
      {
        y2= y1 + LongueurSegment;
        do
          PutPixel(x1, y1);
        while ((y1+= yincr) != y2);
      }
    } while ((x1+= xincr) != x2);
  }
}
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.

2

oui, je me souviens de ton ancien topic smile
c'est pas nouveau cette technique wink

ça s'appelle les traitements segmentés...
la variante de bresenham qui va bcp + vite grin
(cf black book)...
In many respects the Yoshi is like a beautiful woman. A man can come so enamoured that he bestows on her all his time, his energy and his fortune.
- Fred whipple, 1960

*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & Sabrina

3



Et merde encore une fois j'ai réinventé la roue sans le savoir mourn

Quand-est-ce que je réussirai à INVENTER qqch ?
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

bah, c cool de voir ton interprétation, y pe y en avoir plusieurs...
dc c pas si mal en fin de compte...grin

ceci dit, g pas bien lu ton code, mais à vue de nez, ça ressemble très bcp aux traitements segmentés... enfin, une confirmation serait la bienvenue qd même wink
on c jamais grin
In many respects the Yoshi is like a beautiful woman. A man can come so enamoured that he bestows on her all his time, his energy and his fortune.
- Fred whipple, 1960

*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & Sabrina

5

C'est pas une interprétation mais une invention 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.

6

une invention qui interprête le principe des traitements segmentés smile
In many respects the Yoshi is like a beautiful woman. A man can come so enamoured that he bestows on her all his time, his energy and his fortune.
- Fred whipple, 1960

*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & Sabrina

7

tu dis que les divisions sont lentes...
=> je suppose que faire des modulo, c'est lent ?
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

8

Oui.
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é

9

Mais attention : le modulo est réalisé en même temps que la division : en ASM l'instruction divs fait les deux en un coup, squale92 !
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.

10

héhé, une pitite rotation de bits après et...
tada! grin
In many respects the Yoshi is like a beautiful woman. A man can come so enamoured that he bestows on her all his time, his energy and his fortune.
- Fred whipple, 1960

*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & Sabrina

11

Une seule instruction suffit pour les 2 en même temps seulement pour les combinaisons suivantes:
short / short -> short (utilisable en C, même si je ne sais pas si GCC est suffisamment intelligent pour voir qu'une seul instruction calcule les 2 en même temps et qu'un swap suffit pour accéder au reste)
long / short -> short (pas supportée par le C, le C voudra calculer un long et passera par la routine long / long -> long de TIGCCLIB, qui appellera celle d'AMS - peut-être qu'un (short)(long1/short1) le fera changer d'avis, mais je ne pense pas)
[edit]Edité par Kevin Kofler le 08-12-2001 à 21:37:20[/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

TIGCC fait les deux en même temps (swap), j'ai regardé le *.s avant d'affirmer ça 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.

13

Implementer comme ca, je doute que ca depasse Brehensam. Il faudrait pouvoir afficher horizontalement avec un or.w d0,(a0) (avec plusieurs bits de d0 non nuls), mais ca complique tout .

14

oui, il est bien la le problème sad
:D

15

>> Implementer comme ca, je doute que ca depasse Brehensam.
Comparé à une implémentation de Bresenham, il est TRES légèrement plus lent.

>> Il faudrait pouvoir afficher horizontalement avec un or.w d0,(a0)
Je le destine aux bon programmeurs ASM (je veux dire, aux maniaques de l'optimisation).
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.

16

divisions et mudulos st fait en même temps. OK, mais j'utilises jamais de divisions, ou presque.
=> mais va qd même falloir que j''essaye de trouver un moyen de sucrer quelques modulos..
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

17

Quelques idées:

- puissances de 2: mod(x,2^n)=x and (2^n-1)
- tables
- soustractions successives (si le quotient est petit, ça peut être plus rapide qu'un divu ou divs
- pour l'incrémentation en cycles: if(x==n) x=0; - beaucoup plus rapide qu'un modulo si tu veux incrémenter x en cycles (par exemple: 0-1-2-3-0-1-2-3-0...)
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é

18

La division ne se fait qu'au debut. Et en asm, c'est un seul appel.
A mon avis, le pb n'est pas la (Sauf pour les petits segments).

19

Kevin> je note, et je v essayer d'utiliser ça au maximum...
(en général, je fais des modulos assez petits, style X%2, ou X%10 au max)
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

20

PpHd : où alors ?

Sinon, à l'initialisation j'ai fait un commentaire-question que personne n'a vu apparamment : "// Ca marche mal sans le '+1', faut qu'on m'explique pk !"
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.

21

J'adore ta signature Thibaut !!! eektongue

22


Je ne compte même plus le nombre de personnes qui me le dise oui
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.

23

oui, mais l'image c un fake ! sad
ou sont les versions non-trafiquées ? grin
:D

24

Ca doit etre un effet de bord.

25

Ne compte pas sur moi pour t'optimiser ton algorithme. Cf. post.php?id=1,3948,1.
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é

26

Oh, t'es mechant la smile

27

Putain Kevin ta mentalité ARRIERéE me surpend. Dis, avec si peu d'intelligence sociale, tu as beaucoup d'amis ?

Tu viens de tomber bien bas dans mon estime. Ce chantage et cette volonté de toujours vouloir être servi selon ses désirs me fait peur.

TU me fais peur.
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.

28

Réponse à ton commentaire dans l'autre topic.
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é

29

haha smile
:D

30

hé bien...
je vois que la bonne entente et la bonne humeur sont toujours d'actualité...
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall