|
Publicité ' | ||||||||||||||||||||||||
|
|
#21 | |
![]() ![]() Jean-Marc Blanc Inscription : avril 2007 Messages : 2 840 ![]() |
Salut!
Citation:
Malgré cela, il y aurait une solution assez simple: tu numérotes tes points à partir d'une extrémité de ta courbe. Puis tu considères les trois premiers (1, 2 et 3) et tu calcules l'aire du triangle correspondant (avec son signe): S123 = (x1 y2 + x2 y3 + x3 y1 - x2 y1 - x3 y2 - x1 y3) / 2 Tu recommences ensuite avec les points 2, 3 et 4 et tu calcules: S234 = (x2 y3 + x3 y4 + x4 y2 - x3 y2 - x4 y3 - x2 y4) / 2 et ainsi de suite. Ensuite, il te suffit de parcourir la liste des Sijk et de localiser les changements de signe. Jean-Marc Blanc
__________________
Calcul numérique de processus industriels Formation, conseil, développement Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux) |
|
|
|
00
|
|
|
#22 | |
|
Nouveau Membre du Club
![]() Enseignant Chercheur Inscription : septembre 2012 Messages : 106 ![]() |
Bonsoir
Citation:
, car j'arrive presque à finir son code !!dois-je refaire tous le travail et commencer avec cette méthode de calcul de l'air des triangles !!!!
|
|
|
|
00
|
|
|
#23 |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 819 ![]() |
Il faudrait voir si une simple vectorisation par l'algorithme de "Douglas-Peucker" ne suffirait pas à trouver les points recherchées.
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
00
|
|
|
#24 |
|
Expert Confirmé Sénior
![]() Inscription : janvier 2007 Messages : 9 594 ![]() |
Non on les garde en radian : c'est continu.. En degré, il faudra regarder par rapport à 360...
__________________
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle". Consultant indépendant. Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie. C, Fortran, XWindow/Motif, Java Je ne réponds pas aux MP techniques |
|
|
00
|
|
|
#25 | ||||
|
Nouveau Membre du Club
![]() Enseignant Chercheur Inscription : septembre 2012 Messages : 106 ![]() |
Bonjour
J'ai essayé plusieurs fois votre approche mais toujours sans y arriver à ce que je cherche je vous explique un peu ce que j'ai fait: * voici le code dont j'ai tapé Code :
Code :
Code :
si angle <= seuil_bas /* On est plutôt vertical */ Code :
si angle >= seuil_haut /* On est plutôt horizontal */ |
||||
|
|
00
|
|
|
#26 | ||
|
Expert Confirmé Sénior
![]() Inscription : janvier 2007 Messages : 9 594 ![]() |
Je ne sais ni ce que fait assign, ni ce que fait paste, ni ce que fait c ..
D'autre part, tu as des valeurs supérieures à PI (3.1415...).. Honnêtement, comme je ne connais pas R, je ne peux en dire plus.. Normalement, atan2 donne des valeurs entre -PI et PI, dans les autres langages. Et l'algo que j'ai proposé est pas compliqué.. Et je ne vois pas ce que vient faire une matrice là-dedans.. Résumons ce que j'ai proposé :
C'est pas compliqué... Pour un point P(i), la moyenne se fait par : Code :
PS: d'autre part, l'initialisation via NULL parait douteuse.. NULL désigne un pointeur.. Une valeur réelle s'assigne à 0.0.
__________________
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle". Consultant indépendant. Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie. C, Fortran, XWindow/Motif, Java Je ne réponds pas aux MP techniques |
||
|
|
00
|
|
|
#27 | ||||
|
Nouveau Membre du Club
![]() Enseignant Chercheur Inscription : septembre 2012 Messages : 106 ![]() |
Bonjour,
Citation:
Avec ces valeurs trouvées je peut pas faire la comparaison avec les seuils données avant: Code :
![]() Je pose une autre question si vous voulez : comme vous voyez dans la courbe présenté précédemment les valeurs de y sont entre 0 et 0.36 or les valeurs de x sont entre 0 et 838, est-ce que ceci a un effet sur les résultats négatives trouvées !!! parce-que j'ai essayé avec des points ayant ces coordonnées Citation:
![]() veuillez svp m'aidez |
||||
|
|
00
|
|
|
#28 | ||||
|
Expert Confirmé Sénior
![]() Inscription : janvier 2007 Messages : 9 594 ![]() |
Citation:
Citation:
-PI/4+delta ou -PI/4-delta sont tous les 2 négatifs. Ce qui ne va pas c'est d'avoir des valeurs inférieures à -PI... PS: je note dans ton exemple ci-dessus que de a à g tes x décroissent.... Il faut travailler à x croissant...
__________________
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle". Consultant indépendant. Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie. C, Fortran, XWindow/Motif, Java Je ne réponds pas aux MP techniques |
||||
|
|
00
|
|
|
#29 |
|
Nouveau Membre du Club
![]() Enseignant Chercheur Inscription : septembre 2012 Messages : 106 ![]() |
Re-bonjour,
Ce que je veut dire ici que toutes les valeurs d'angle dont j'ai trouvés sont >= seuil_haut. On ait donc dans ce cas: Code :
angle >= seuil_haut /* On est plutôt horizontal */ ![]() ce que j'arrive pas à comprendre pourtant la courbe passe d'une tendance verticale à une horizontale !!!!!! |
|
|
00
|
|
|
#30 |
|
Expert Confirmé Sénior
![]() Inscription : janvier 2007 Messages : 9 594 ![]() |
Donne les valeurs des angles que tu trouves...
Je soupçonne la même chose que plus haut, c'est à dire que tu as des angles < -PI... ou que tu prends les points par x décroissant... Fait juste imprimer dans ta boucle atan2(Pt(i),Pts(i-1)), atan2(Pt(i+1), Pt(i), moyenne. Tu ne devrais avoir que des valeurs entre 0 et -3.14116.. En prenant bien le point 0 comme celui avec le x le plus petit et le point N comme celui avec le x le plus grand... C'est pas compliqué, avec tes graphes : tu as y = f(index) = f(x) Ton index (x) croit, ton y décroit... Un point est bien (x=index,y=f(index))
__________________
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle". Consultant indépendant. Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie. C, Fortran, XWindow/Motif, Java Je ne réponds pas aux MP techniques |
|
|
00
|
|
|
#31 | ||
|
Nouveau Membre du Club
![]() Enseignant Chercheur Inscription : septembre 2012 Messages : 106 ![]() |
Bonsoir,
voici les résultats que je trouve : Code :
(vous trouvés que les y les abscisses sont de 1 à 838, toujours je fais Vous avez dit que je traite des courbe dont les x décroisent et les y croisent . Ben oui c'est ça mon cas d'étude toujours sur ce types de courbes. |
||
|
|
00
|
|
|
#32 | |
|
Expert Confirmé Sénior
![]() Inscription : janvier 2007 Messages : 9 594 ![]() |
Je me REPETE : il y a un problème..
Juste les 3 premier chiffres : -3.057139e-02 -4.369665e-03 -8.627038e-03 Si c'est ce que j'ai demandé au dessus il y a un problème : si le premier angle est -3.057139e-02, c'est à dire à peu près -0.031, et le second -4.369665e-03, c'est à dire à peu près -0.004, la somme fait -0.035, et la moyenne -0.0175, et pas -8.627038e-03.... Et comment ça se fait que ton nombre entre crochets ne croit pas de 1 en 1 ??? je t'ai demandé d'afficher la liste [i] angle (i,i-1) angle(i+1,i) moyenne Et avec le résultat que tu trouves ci-dessus, tu n'as tjs pas le bon résultat ??? Citation:
Que veux-tu que je te dise de plus ?? C'est pas compliqué.. Ton fichier joint donne les y (qui sont bien strictement décroissants), et les X sont soit le numéro de la ligne dans ce fichier, soit ton index (si ce n'est pas le numéro de la ligne)...
__________________
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle". Consultant indépendant. Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie. C, Fortran, XWindow/Motif, Java Je ne réponds pas aux MP techniques |
|
|
|
00
|
|
|
#33 | ||||
|
Nouveau Membre du Club
![]() Enseignant Chercheur Inscription : septembre 2012 Messages : 106 ![]() |
Alors je revient là dessous et je vous explique:
avant tout désolé concernant : Citation:
Citation:
Citation:
Citation:
je sais pas pourquoi ça marche pas pourtant j'ai beaucoup essayé et testé |
||||
|
|
00
|
|
|
#34 | |
|
Expert Confirmé Sénior
![]() Inscription : janvier 2007 Messages : 9 594 ![]() |
Citation:
OK. Par contre, les valeurs sont réellement bizarres.. Les angles devraient être entre 0 (segment horizontal) et -PI/2 (segment vertical), c'est à dire entre 0.0 et -1.57 ... En particulier, les points vraiment quasi-verticaux devraient être entre -1.57 et -1, et non pas autour de -0.03... Que prends-tu comme x(i)-x(i-1) ou x(i+1)-x(i) ??? on devrait prendre 1, si on se sert de l'indice comme abscisse... Ecoute, je regarderais ça demain, mais honnêtement il y a truc qui cloche dans ton calcul d'angle...
__________________
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle". Consultant indépendant. Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie. C, Fortran, XWindow/Motif, Java Je ne réponds pas aux MP techniques |
|
|
|
00
|
|
|
#35 | |
|
Nouveau Membre du Club
![]() Enseignant Chercheur Inscription : septembre 2012 Messages : 106 ![]() |
Bonjour,
Citation:
Veuillez svp faire un petit calcul de la moyenne du premier angle fournit par Pt(i),Pt(i-1) et Pt(i+1),Pt(i). Et vous allez trouvés le résultat que vous ais fournis. veuillez svp me dire d'où vient le problème
|
|
|
|
00
|
|
|
#36 | ||||
|
Expert Confirmé Sénior
![]() Inscription : janvier 2007 Messages : 9 594 ![]() |
ok, c'est de ma faute
J'ai oublié qu'il fallait normaliser pour avoir le bon angle.. D'autre part, tes données sont assez bruitées, donc il vaut mieux en fait faire la moyenne sur 5 points plutôt que sur 3. Enfin le delta est mieux à 15 degrés qu'à 5.. (horizontal si angle > -30, vertical si angle < -60) Voici le code en C : Calcul de la moyenne par point (entre les points 2 et N-3 pour pouvoir faire un lissage de 5. Tu peux ajouter une modification des bornes pour aller de 0 à N-1.) et pour normaliser, puisque le delta x est 1, on peut soit multiplier le delta y par N, soit diviser le delta x par N. Si on divise 1 par N, on a juste une fois à faire la division.. Code :
PS: pour faire de 0 à N-1, il faut avoir 2 variables pour le début et la fin de la boucle de moyenne, et ajuster ces 2 variables : Code :
__________________
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle". Consultant indépendant. Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie. C, Fortran, XWindow/Motif, Java Je ne réponds pas aux MP techniques |
||||
|
|
00
|
|
|
#37 | ||
|
Nouveau Membre du Club
![]() Enseignant Chercheur Inscription : septembre 2012 Messages : 106 ![]() |
Bonjour,
Merci toujours pour vos réponses Citation:
![]() c'est ma première remarque, la deuxième est tant que je saie que je vais faire le lissage sur 5, à quoi sert la variable m je crois qu'on peut améliorer el render Maintenant je revient sur le deuxième code !!j'ai pas bien compris que désignez vous faire avec !! Maintenant après avoir obtenus les valeurs de premier code que dois-je faire !! et est-ce que le schéma d'algorithme dont on a parlé avant avec le seuil-bas, seuil_haut, delta .. est tout erroné ... !! Comment faire les comparaison alors !! et avec quel valeur , et quel est le bon schéma d'algorithme. concernant le deuxième code ici j'ai pas bien compris ce que vous désignez faire ou comment ça se passe les trucs dedans Citation:
Cordialement B.H |
||
|
|
00
|
|
|
#38 | ||||
|
Expert Confirmé Sénior
![]() Inscription : janvier 2007 Messages : 9 594 ![]() |
Citation:
On fait bien la moyenne de 5 points, mais 4 pentes.. Légéreté de ma part... Citation:
Citation:
Si on veut être propre et tenir compte de ce qu'on appelle "les effets de bords", il faut moduler le nombre (4) par le nombre possible (2 au minimum).. Le second code ne fait que tenir compte de ces 4 points spéciaux pour lesquels on n'aura pas 4 points à moyenner, mais 3 ou 2.. Il faut juste passer par des variables intermédiaires pour les bornes de la boucle, car ces bornes dépendent des points : si c'est le premier point de données, on ne peut pas atteindre ni -1, ni -2, donc il faut démarrer à 1, et on aura 2 angles à moyenner. Pour le second, on ne peut pas atteindre -2. Il faut donc démarrer à 0, et on aura 3 angles à moyenner. Puis on aura 4 points à moyenner, jusqu'à ce qu'on arrive à N-2, où on n'aura plus que 3 points à moyenner (N n'est pas atteignable), et pour le dernier point (N-1), on n'aura plus que 2 points à moyenner, puisque ni N ni N+1 (donc i+1 et i+2) ne sont atteignables... Le "m" auquel tu fais référence est juste là pour permettre facilement de passer ces 4 points... Citation:
Le code (l'un ou l'autre) donne le bon résultat. Le second est juste plus "propre" mathématiquement... Maintenant, ça dépend de ce que tu veux comme point d'inflexion (en particulier pour le premier) : si l'on suit ton schéma indiqué dans ton premier post, on pencherait pour démarrer à 2 et non à 0.... A ce compte-là le premier code suffit, et on peut mettre 4 en dur au lieu de m (et puisque tu veux optimiser, alors il faut mieux mettre "* 0.25" que " / 4", car une multiplication est plus rapide qu'une division
__________________
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle". Consultant indépendant. Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie. C, Fortran, XWindow/Motif, Java Je ne réponds pas aux MP techniques |
||||
|
|
00
|
|
|
#39 | ||||||
|
Nouveau Membre du Club
![]() Enseignant Chercheur Inscription : septembre 2012 Messages : 106 ![]() |
Bonjour
concernant le premier code de faire le lissage sur 5 points. Voici les résultats que j'obtient : Code :
MA deuxième question est comment procéder l'étape suivante ? parce que vous avez parlez des deux codes : Code :
Code :
"Je sais bien que vous casse la tête depuis un mois avec cette histoire des points d'inflexions :/" Toujours du merci à votre aide et à vos réponses Cordialement B.H |
||||||
|
|
00
|
|
|
#40 | ||||
|
Expert Confirmé Sénior
![]() Inscription : janvier 2007 Messages : 9 594 ![]() |
Citation:
Citation:
, il correspond au premier des codes que tu cites.. Fais marcher ta tête et tes yeux : je t'ai dit déjà 3 fois que le deuxième n'était que pour tenir compte des points aux extrémités.Le premier des codes est le schéma de l'algo qu'il te faut suivre.. Dans la recopie de ta table que j'ai inclus ci-dessus, j'ai mis en gras et en rouge les valeurs correspondantes aux points trouvés (avec les seuils donnés plus aut, c'est à dire avec 15 degrés de sûreté de part et d'autre de 45 degrés) : premier point le 1 (début zone verticale), puis le 26 'début zone horizontale), puis le 135 (début petite zone verticale), puis le 145 (début grande zone horitanle de fin)
__________________
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle". Consultant indépendant. Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie. C, Fortran, XWindow/Motif, Java Je ne réponds pas aux MP techniques |
||||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com