Est-ce que vous gerez le cas ou les coordonnees passees en argument sont en-dehors des limites de clipping?
Oui, au début du code je change si besoin la hauteur de départ et d'arrivée pour ne parcourir que les lignes à l'écran :
- Code: Tout sélectionner
if (top < 0) {
top = 0;
}
if (bottom > m_clippingRect.height()) {
bottom = m_clippingRect.height();
}
Puis dans chaque ligne, si le "switch" est à gauche de l'écran, je ne remplis pas le rectangle
- Code: Tout sélectionner
if (switchesX[i+1]>left) {
fillRect( KDRect(switchesX[ i ], y, switchesX[ i+1 ] - switchesX[ i ], 1 ), color ) ;
}
et s'il est à droite, j'interromps la boucle et je passe à la ligne suivante.
- Code: Tout sélectionner
if (switchesX[i]>=right) {
break;
}
Chez vous, il y a le tri qui est en O(n^2) mais evidemment c'est plus difficile a ameliorer car pas de vraie libc chez Epsilon, donc pas de qsort
Effectivement, le bubble sort était le plus simple à implémenter, et je ne vise pas un trop grand nombre d'arrêtes traversant chaque ligne, mais si quelqu'un me signal des ralentissements sur la méthode, je pourrais toujours la passer en quick sort.
Il y a d'autres optimisations chez moi pour minimiser le temps de calcul des abscisses des aretes qui traversent la ligne courante
Ce n'est pas juste une simple "moyenne" des deux points ?