Go Down

Topic: programmation cartésienne. (Read 7109 times) previous topic - next topic

jfs

Nov 21, 2011, 01:30 pm Last Edit: Nov 21, 2011, 02:02 pm by Jean-François Reason: 1
J'ai quelques soucis avec un système cartésien.

Je dois tracer les segments d'un cercle dont les extrémités sont tangentes à l'intérieur du périmètre de ce dernier (pas sur d'être très clair  :smiley-red: ). Le diamètre du cercle peut être paramétré, mais la circonférence ne sera pas un chiffre "rond" ou inversement.

Dans une première approche, cela semble relativement simple, on calcule la valeur des segments (pair ou non) de façon à ce que le nombre de ces derniers rentre dans le cercle et que leurs extrémités se jouxtent.

les segment sont placés par le biais d'une boucle for qui compare la longueur de l'hypothénus du triangle cartésien formé par les vecteurs x-y , y-x et la valeur que doit avoir le segment, en plaçant toujours le point variable sur le cercle (toujours pas sur d'être clair  :smiley-red: :smiley-red:).




J'ai trois problèmes :


  • Suivant la position du segment, la boucle for mets un temps beaucoup de temps à trouver la coordonnées du deuxième points car elle part de x=0 jusqu'à x= segment  

  • l'incrémentation n'étant pas en nombre entier, je ne tombe jamais sur 0 pour x ou y et je n'arrive jamais à la valeur du diamètre.... je n'arrive qu' à des valeurs approchées d'environ 0.05 à 0.7

  • Je ne sais pas comment faire le passage positif- négatif des axes x-y, la valeur du zéro n'étant jamais atteinte dans mes coordonnées x ou y



Donc mes questions :


  • Comment faire un contrôle dans la boucle for afin que celle-ci soit plus rapidement au résultat ?

  • Est ce possible d'avoir des valeurs "nettes" au milieu et en bouts de "course" ?

  • Comment faire mes passage  +- et -+ si je n'ais pas de valeurs "nettes" ?



rendu des interro à .... je plaisante  XD
Pas d'aide par MP !!!

Concernant le fonctionnement du forum tout se trouve dans les messages épinglés en tête de page.

patsol

Quote
(toujours pas sur d'être clair  smiley-red smiley-red).

un p'tit dessin, pt'et

jfs

Voui, voui.... ça vient.  XD


Edit : c'est dans le premier message
Pas d'aide par MP !!!

Concernant le fonctionnement du forum tout se trouve dans les messages épinglés en tête de page.

fdufnews

L'idée c'est de tracer l'approximation d'un cercle par ses cordes ou de tracer une corde quelconque d'un cercle?

ekaki

Mhm, c'est un cercle physique.
(un cercle mathématique ne peut pas être tracé ni représenté car c'est une infinité de segments)

Mais l'idée c'est simplement de tracer un cercle (sur un affichage, un écran, etc.) ou c'est de calculer des valeurs dans le cercle (points d'origine/fin des segments, longueur des segments, etc.) ?

Car si c'est uniquement pour générer une représentation graphique du cercle il y a peut-être des outils (bibliothèques) qui font déjà cela (Processing ? GDLib...) et/ou il y a moyen de simplifier sans que cela ne soit physiquement visible (genre un cercle de 720 segments : Il faut une bonne résolution pour voir que c'est une suite de segments).

Si c'est pour effectuer des calculs de trigonométrie, il y a de forte chance que la méthode ne soit pas optimale dans un système cartésien : En physique appliquée [modélisation des mathématiques] nous utilisons un système polaire pour résoudre les équations en rapport avec trigonométrie. C'est bien plus simple; il suffit de mettre une fonction de PI en Step dans la boucle For.

jfs

#5
Nov 21, 2011, 04:03 pm Last Edit: Nov 21, 2011, 04:16 pm by Jean-François Reason: 1
Je parle de cerle pour simplifier... comme c'est paramétrable, cela peut devenir une ellipse.

Ce qu m'intéresse, c'est le tracé des segments, le cercle est uniquement pour justifier et n'a pas vraiment besoins d'être tracé.

Je ne veux pas passer par une lib.

J'ai déjà une version qui fonctionne, mais uniquement pour un nombre de segments pair et divisible par 4, en faisant un quart du camembert, puis en le "copiant" avec une rotation.


Je vais tout de même regarder si j'arrive à m'en sortir en coordonnée polaire....  , mais je sens que je vais de nouveau passer quelques nuit blanches XD
Pas d'aide par MP !!!

Concernant le fonctionnement du forum tout se trouve dans les messages épinglés en tête de page.

ekaki


Je parle de cerle pour simplifier... comme c'est paramétrable, cela peut devenir une ellipse.

Ce qu m'intéresse, c'est le tracé des segments, le cercle est uniquement pour justifier et n'a pas vraiment besoins d'être tracé.
(...)


Tu veux tracer des courbes aléatoires alors, genre Splines ?
Ou cela reste une forme de révolution ? (cercle, ellipse, etc.)

Si cela reste de révolution il y a les Coniques qui permettent de résoudre les équations.
[ ax2 + 2bxy + cy2 + 2dx + 2ey + f = 0 ; si e=0 : cercle et si 0<e<1 : ellipse]

jfs

#7
Nov 21, 2011, 04:24 pm Last Edit: Nov 21, 2011, 04:31 pm by Jean-François Reason: 1
Toujours en révolution.... la révolution ça me plait  XD

Aurais tu un exemple (liens) qui explique les coniques ?

Edit : 
coniques

C'est un peu ce que je disais pour les nuit blanches  :smiley-mr-green:
Pas d'aide par MP !!!

Concernant le fonctionnement du forum tout se trouve dans les messages épinglés en tête de page.

ekaki


(...)
Aurais tu un exemple (liens) qui explique les coniques ?
(...)


Il y a de la documentation genre :
-> http://www.scribd.com/doc/14819165/Regressions-coniques-quadriques-circulaire-spherique
Et quelques autres que l'on peut trouver sur internet.

Mais je te préviens; c'est du lourd ce domaine !

J'ai bien quelques exemples de codes, mais mon soucis est qu'ils ne sont pas en C. Jamais pensé à utiliser une Arduino pour effectuer ce genre de calculs o.o"

ekaki

A la limite, si tu es certain que cela reste dans une forme entre le cercle et l'ellipse et que cela ne part pas en hyperbole etc. et que tu me donnes un peu de temps (je vais être occupé au taf' jusqu'à une heure tardive), je te posterai un bout de code qui devrait fonctionner -.^

jfs

Merci.

En effet, c'est toujours une ellipse.... dégénérée lorsqu'elle devient circulaire  XD.
Pas d'aide par MP !!!

Concernant le fonctionnement du forum tout se trouve dans les messages épinglés en tête de page.

ekaki

#11
Nov 22, 2011, 12:15 am Last Edit: Nov 22, 2011, 10:22 pm by Jean-François Reason: 1
Ok.
Et oui, un cercle est un cas particulier d'ellipse -.^
Dans ce cas c'est assez simple (j'espère que je ne vais pas me planter après avoir dit ça !).

Donc en partant de la conique :
ax² + 2bxy + cy² + 2dx + 2ey + f = 0
On simplifie car on sait que cela ne décrochera pas en hyperbole/parabole :
(x/a)² + (y/b)² = 1

Ensuite ce que l'on fait d'habitude comme je l'ai souligné précédemment, c'est que l'on passe dans un système polaire :
x = a*cos(theta)
y = b*sin(theta)
On peut vérifier que si a = b (cas du cercle), cela correspond bien à la génération d'un cercle; le rayon étant a = b = r.

Puis on arrange cela pour faire tourner l'angle dans une boucle For (genre radar qui va dessiner l'ellipse) :
Code: [Select]
for(t=0;t<angle;t++)
{
 x = a*cos(t*2*PI/angle);
 y = b*sin(t*2*PI/angle);
}


A noter que accessoirement le code n'est pas du tout optimisé ^.^" C'est juste pour donner un exemple.


Edit de Jean-François: juste fait une ch'tite correction dans la boucle for  ;)

jfs

Merci pour ce petit bot de code qui fonctionne bien.

Par contre, je n'arrive pas à déterminer l'origine de la fonction (le centre de l'ellipsoïde).

Les points sont plus nombreux dans les émisphéres "x" donc les distances entres les points sont moins grandes que dans la zone "y".... et c'est le problème autour duquel je tourne depuis trois semaines  :smiley-mr-green:.
Pas d'aide par MP !!!

Concernant le fonctionnement du forum tout se trouve dans les messages épinglés en tête de page.

ekaki


(...)
Par contre, je n'arrive pas à déterminer l'origine de la fonction (le centre de l'ellipsoïde).


Mhm... C'est à dire ?
L'origine des calculs se fait par rapport aux foyers de l'ellipse (il y a deux points) (?).
A la limite si tu veux connaître les coordonnées du barycentre de l'ellipse il suffit de calculer le point médian entre les deux foyers (?).

Les points sont plus nombreux dans les émisphéres "x" donc les distances entres les points sont moins grandes que dans la zone "y".... et c'est le problème autour duquel je tourne depuis trois semaines  :smiley-mr-green:.


Ah oui, ça, c'est normal.
Il n'y a que pour un cercle que l'intervalle entre les points sont égaux. Dans le cas de l'ellipse le facteur de transformation fait que l'intervalle entre les points n'est pas constant; ils se répartissent en fonction de la projection de la parabole.

On pourrait compenser leur répartition en introduisant une variation hyperbolique proportionnelle à l'angle formé entre la droite passant par les foyers et l'angle de projection mais il y a des inconvénients : Perte massive de résolution sur les parties les plus courbées de l'ellipse et impossibilité de résoudre l'équation lorsque que les sommets des foyers sont confondus (cas du cercle).

A coté de cela, il y a une question que je ne t'ai pas posé : C'est pour quoi faire ? ^.^ Parce qu'il y a peut-être une meilleure voie pour résoudre ton problème... Par exemple, les équations gaussiennes, ou l'algo de Bresenham. Mais cela dépend du contexte etc.

jfs

#14
Nov 23, 2011, 05:04 pm Last Edit: Nov 23, 2011, 05:38 pm by Jean-François Reason: 1


(...)
Par contre, je n'arrive pas à déterminer l'origine de la fonction (le centre de l'ellipsoïde).


Mhm... C'est à dire ?
L'origine des calculs se fait par rapport aux foyers de l'ellipse (il y a deux points) (?).
A la limite si tu veux connaître les coordonnées du barycentre de l'ellipse il suffit de calculer le point médian entre les deux foyers (?).



J'avais pas pensé aux deux foyers je regarderai ça en y pensant  XD



Il n'y a que pour un cercle que l'intervalle entre les points sont égaux. Dans le cas de l'ellipse le facteur de transformation fait que l'intervalle entre les points n'est pas constant; ils se répartissent en fonction de la projection de la parabole.

On pourrait compenser leur répartition en introduisant une variation hyperbolique proportionnelle à l'angle formé entre la droite passant par les foyers et l'angle de projection mais il y a des inconvénients : Perte massive de résolution sur les parties les plus courbées de l'ellipse et impossibilité de résoudre l'équation lorsque que les sommets des foyers sont confondus (cas du cercle).


Avec une solution de ce type ? (ensuite pour une nombre impair....  XD)



J'ai trouvé ça sur ce site :

http://www.mathcurve.com/courbes2d/orthogonale/orthogonale.shtml


Ou ça avec la même question pour un nombre impairs de portions :



http://xavier.hubaut.info/coursmath/com/expon.htm


Mais je ne sais pas trop comment utiliser ça (si ça convient)  :smiley-sweat:.
Pas d'aide par MP !!!

Concernant le fonctionnement du forum tout se trouve dans les messages épinglés en tête de page.

Go Up