ScSami
Messages postés1488Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 3 décembre 2007
-
2 nov. 2006 à 22:44
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 2011
-
4 nov. 2006 à 14:27
Bonjour. Ma question s'adresse a un membre balèze en maths et particulièrement en géométrie.
J'aimerais, pour une raison précise, faire une fonction qui retourne tous les points d'une courbe de Bezier. J'ai bien l'équation qui dessine la courbe, mais via des points compris entre 0 et 1 (nombres réels donc) et c'est à nous de donner le nombre de points à lui faire faire (via une boucle donc). Or, moi, j'aimerais connaître la longueur, en pixels entiers, de la courbe. Du moins, c'est ce que je cherche à faire. Mais pour ça, il me manque la longueur vectorielle (en nombres réels) de cette courbe .
Si j'avais la réponse, promis, je vous ferais la plus belle source du monde
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 201626 3 nov. 2006 à 10:09
salut,
sur le principe de la méthode des trapèzes : tu subdivises [0;1] en N morceau égaux...ensuite tu calcules les N+1 coordonnées de chaque point de ta subdivision (0, 1/N, 2/N...(N-1)/N,1)...et ensuite, longueur = somme(0,N-1,sqrt((x(n)-x(n+1))^2+(y(n)-y(n-1))^2)...donc approximation...plus N grand plus précision...
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 201626 3 nov. 2006 à 18:41
salut,
personnellement, je dirais qua la résolution est 1/sqrt((x-x')^2+(y-y')^2) où (x,y) et (x',y') sont les coordonnées en pixels du début et de la fin de la courbe...en effet si on place cette distance à l'horizontale, on revient à tracer une courbe f(x) avec un pas en pixel...
cependant je ne suis pas sur que les méthodes de tracé s'en occupe réellement...
ScSami
Messages postés1488Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 3 décembre 200724 3 nov. 2006 à 16:16
Merci beaucoup pour ces quelques explications... Mais alors, maintenant, ma question est : quelle est la précision "du pixel" comment l'obtenir ???
- En fait, là, en l'état, pour récupérer les coordonnées de chaque pixel contigue de la courbe il faut d'abord calculer la courbe une première fois pour obtenir l'approximation du nombre de pixels contigues pour ensuite recalculer la courbe pour l'afficher !!! Beaucoup trop lent !!! Perso, je subdivisais la courbe par 0,01 ce qui me donnait une précision suffisante pour un affichage en 1024x768. Mais je calcule trop de points.
- La solution serait, à la limite, de trouver un rapport le nombre de subdivisions et une valeur type largeur/hateur de la courbe(par ses points)/écran ou de son hypoténuse ou autre pour obtenir une précision à l'unité de type nombre entiers employée (le Pixel en l'occurrence).
- Ou alors, de trouver à coup sûr un ratio inférieur à l'unité utilisée pour pouvoir arrondir les coordonnées et faire un teste de mémorisation du style : If CoordsXY = beforeCoordsXY then non_mémoriser
ScSami
Messages postés1488Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 3 décembre 200724 3 nov. 2006 à 22:34
Arf, non, ça ne fonctionne pas.
En fait, je t'explique : ce que j'essaie de faire c'est d'éviter le vilain effet de doublage des lignes (à certain endroits [i.e. aux endroits où les points sont rapprochés {dans les courbes violentes}]) qui apparait dans les algos basiques (tel celui sur codetoad). J'essaie de reproduire celles de Windows (via les API) afin, non pas de réinventer la roue, mais de l'améliorer (WuPixelling entre autre). D'ailleurs, le ration 0.01 est bien meilleur que celui de 0.001 !!! Sauf en cas de dessin extrêmes sur toute la longueur du Long des PictureBox (et autres devices dependant contexts).
Puisque Crosoft peut le faire, j'vois pas ce qui nous empêche de le refaire
Je pense que la solution mathématique a un rapport directe avec l'équation de base... oui mais, lequel, telle est la question !!!
Vous n’avez pas trouvé la réponse que vous recherchez ?