pb calcul de rayon entre deux points sans sqrt - C - Programmation
Marsh Posté le 03-09-2008 à 17:28:26
il y a des methode de calcul plus rapide pour la racine carré, mais je serai surpris que ce soit ce calcul qui fasse ramer ( a moins que tu ne fasse tourner ca sur du matériel embarqué )
Marsh Posté le 03-09-2008 à 17:33:00
bah y a deux truc qui font ramer le programme la premiere est sqrt pour le rayon et la deuxieme est le fais que je parcours une boucle while pour tracer le cercle sur 360 degres j'ai regler ce probeme en fesant un symetrie et en ne fesant que 90 degres du cercle.
Cependant si je met en commentaire ma boucle while le programme ram encore quand le rayon est trop grand... je cherche depuis ce matin un moyen efficace pour ce probleme. Mais je dois chercher mal malheureusement T.T
Marsh Posté le 03-09-2008 à 17:33:02
c surtout le coup du "500" qui me pose problème à moi.
à part que tu dessines ton cercle, tu tenterais pas de faire de la détection de collision ou autre ? genre quand t'arrive à 500 t'as beaucoup plus d'objets à tester et du coup ça effondre les perfs ?
Marsh Posté le 03-09-2008 à 17:37:23
Nan aucune gestion de collision, c'est juste que le cercle devient trop grand. Et pour le moment je ne test que mon cercle comme objet donc je n'ai pas d'autre objet a tester.
Mais sinon pour ce probleme de sqrt y a un autre moyen une autre formule ??
Marsh Posté le 03-09-2008 à 19:13:49
Que fais-tu avec le rayon, des fois on peut se contenter de la valeur carrée par ex si on cherche à savoir si un point est dans le cercle
Marsh Posté le 03-09-2008 à 19:34:33
preposterus a raison, en genral pour eviter de faire une sqrt, on change l'algo en le mettant au carré.
Marsh Posté le 03-09-2008 à 19:57:01
Je ne vois pas pourquoi pour tracer un cercle on a besoin de calculer des racines carrées, à la rigueur une si le cercle est défini par le centre et un point.
Voir http://homepage.smc.edu/kennedy_john/BCIRCLE.PDF par exemple.
Marsh Posté le 03-09-2008 à 21:05:01
Un Programmeur a écrit : Je ne vois pas pourquoi pour tracer un cercle on a besoin de calculer des racines carrées, à la rigueur une si le cercle est défini par le centre et un point. |
En fait, ce qu'il calcule la, avec sa formule, c'est la distance entre deux points. Apres, si tu prends pour centre l'un des points et que tu traces un cercle passant par l'autre, cette distance est le rayon du cercle...
A+,
Marsh Posté le 04-09-2008 à 07:30:09
Et pourquoi le calcul du rayon serait plus lent quand le cercle est plus grand ???
Marsh Posté le 04-09-2008 à 09:03:00
el muchacho a écrit : Et pourquoi le calcul du rayon serait plus lent quand le cercle est plus grand ??? |
ça, c'est bien le truc qui me fait tiquer, d'où ma question sur d'éventuels autres traîtements
Marsh Posté le 04-09-2008 à 10:08:35
ce ne serait pas tout bêtement que le rayon est calculé à chaque itération au lieu d'être calculé une seule fois et réutilisé ?
Edit : http://fr.wikipedia.org/wiki/Algor [...] _Bresenham ca peut aussi éventuellement te servir ...
Marsh Posté le 04-09-2008 à 10:26:38
ceci dit, si c'est calculé pour dessiner le cercle selon chaque degré d'angle, le nombre de points est le même quelle que soit la taille du rayon, donc pas de lien avec la dimension du cercle
Marsh Posté le 04-09-2008 à 10:39:45
MagicBuzz a écrit : ceci dit, si c'est calculé pour dessiner le cercle selon chaque degré d'angle, le nombre de points est le même quelle que soit la taille du rayon, donc pas de lien avec la dimension du cercle |
tant que je n'ai pas vu l'algorithme utilisé, je ne ferai pas ce genre de suppositions Ca ne me surprendrait pas qu'il ait augmenté le nombre d'itération en fonction du rayon justemnt pour éviter d'avoir des blancs entre les points.
Reste que cet algorithme naïf n'est clairement pas le melleur choix si on se soucie des performances ...
Marsh Posté le 04-09-2008 à 10:41:42
en tout cas merci, pour toute vos reponse je pense avoir reussit a trouver mon probleme, vu que en SDL je creer une surface qui va contenir on cercle, seulement plus le cercle est grand plus la surface a creer va etre grand d'ou le lag de mon prog.
Jvais me poster sur ce probleme merci encore (ps: venez me voir au forum "paris capital du libre )
Marsh Posté le 04-09-2008 à 12:11:40
theshockwave a écrit : |
c'est lui qui a dit qu'il faisait le dessin en faisant un angle de 1° à chaque fois et que pour accélérer le truc il faisait le dessin sur 90° puis faisait des symétries
Marsh Posté le 04-09-2008 à 12:42:55
MagicBuzz a écrit : |
Trouve-moi où c'est précisé 1° à la fois
mais bref, osef
Marsh Posté le 04-09-2008 à 13:45:40
Ceci peut surement t'aider :
Code :
|
http://www.lomont.org/Math/Papers/2003/InvSqrt.pdf
Marsh Posté le 04-09-2008 à 15:25:22
lanfeust37 a écrit : je parcours une boucle while pour tracer le cercle sur 360 degres j'ai regler ce probeme en fesant un symetrie et en ne fesant que 90 degres du cercle. |
désolé, mais c'est écrit
faire une boucle sur 360° c'est faire une boucle pour chacun des 360° degrés
Marsh Posté le 06-09-2008 à 10:07:40
lanfeust37 a écrit : Bon voila je suis sur un projet Open source avec 2 autres personne. Je suis en 2eme annee d'informatique et j'ai besoin de calculer le rayon d'un cercle entre deux points (x1,y1) et (x2, y2) , ou (x1,y1) correspond au centre du cercle. |
La formule du rayon d'un cercle est mathématique. Ca ne peut donc pas changer.
En revanche, tu peux utiliser cet algo issu de la propriété de la suite
- U0 = X (X nombre quelconque différent de 0)
- Un+1 = ½ (Un + N/Un)
Et qui est croissante vers racine(N)
Code :
|
Je sais pas si c'est plus ou moins rapide que sqrt() mais c'est mathématiquement équivalent.
Marsh Posté le 08-09-2008 à 10:57:47
sinon, si tu veux rester sur ton algo, tu peux aussi assez facilement faire de la symétrie par coups de 45° et aussi faire des tables de précalcul (tableau de sinus et cosinus), t'assurer que tu ne calcules qu'une seule fois ton rayon (le sqrt hors de ta boucle, donc)
Précision : parce que je doute que ce soit juste d'avoir même 90 sqrt pour tracer ton cercle qui te fasse un ralentissement notable si tu ne el fais qu'une fois
Marsh Posté le 03-09-2008 à 17:26:10
Bon voila je suis sur un projet Open source avec 2 autres personne. Je suis en 2eme annee d'informatique et j'ai besoin de calculer le rayon d'un cercle entre deux points (x1,y1) et (x2, y2) , ou (x1,y1) correspond au centre du cercle.
J'utlise un programme de SDL qui affiche en temps reel un cercle, sachant que son rayon varie tout le temps le programme ram quand le rayon depasse 500.
Ce qui pose un petit probleme, est ce que quelqu'un aurait un autre formule que celle la :
R = sqrt((x0 - x2) * (x0 - x2) + (y0 - y2) * (y0 - y2));
Merci d'avance