Hello world ^^
Je cherche à savoir si il serait possible de détecter si une sourie décrie un cercle(enfin plus ou moins) en Jquery. Je ne vois pas trop comment m'y prendre.
Pt que lorsque la sourie décris un angle plus grand que celui d'avant et si la coordonnée est proche de celle de départ, il est détecter comme cercle.
Merci d'avance
Il n'y a plusieurs moyen de faire ca (et je ne pense aps que jQuery te sera d'une quelconque utilite la-dedans).
A premiere vu j'ai bien un algorithme naif en tete qui utilise le barycentre d'un nuage de point.
Tu gardes tout le chemin des points entre l'evenement mouseDown et mouseUp. Tu en tires donc un tableau de points ordonnes qui forment un path (generalement non ferme).
Tu computes ensuite l'isobarycentre G de ce nuage de point P.
Tu en tires ensuite la distance d(O,M) pour tout point M de ton nuage de points.
Et c'est la qu'on commence un peu a faire ce qu'on veut. Mon intuition te dirait d'ensuite en tirer la distance moyenne d, puis l'ecart-type relatif.
L'ecart-type relatif devrait etre un bon facteur sur lequel tu pourras jouer ou non en fonction d'un threshold que tu auras toi-meme decide : 5... 10... 15%.
C'est vraiment pas complique a faire en tout cas
PS : Tu peux aussi utiliser un filtre passe-bas lors de la capture des points pour lisser dans un premier temps la courbe resultante.
My bad.
Jquery ferais tout autant pareil que Javascript, je dis ça car je l'utilise beaucoup)
"Tu computes ensuite l'isobarycentre G de ce nuage de point P. " -> gné ?
filtre passe bas?
Merci mais je comprends pas tout :P
Tu es en quelle classe ?
quel rapport? Je suis bac+3
A bac+3, tu devrais etre assez grand pour decouvrir tout seul ce qu'est un iso barycentre (c'est un peu le prgramme de 5eme en geometrie).
Oui parce qu'avant de lancer ce mot j'avais quand meme verifie ton cv...
Le barycentre c'etait niveau 1ere S a mon epoque mais dans tous les cas toute filiere technologique du lycee a du voir ca aussi. C'est une notion fondamentale et basique.
Meme chose pour les filtres passe-bas quand on commence dans le superieur. Quel type de bac + 3 fais tu ? C'est etrange de ne jamais avoir entendu parler de ces deux termes auparavant, tu fais des etudes en france ?
Un bon Google et tu auras ta memoire rafraichie ![]()
Franchement tu pense que repondre comme ca est une facon pedagogique des choses? Barycentre tkt pas pour moi je connais. Je vais faire avec ton premier poste.
Filtre passe bas en code est un ensemble de condition si je suit ton raisonnement.
Quand on pose une question, on essaye d'y repondre clairement. Merci de me sortir des notions mathematiques, sur papier c'est cool, sur code c'est différent.
Je ne sais pas pourquoi tu le prends mal. On est en droit d'emettre qu'un etudiant de 22 ans connait le programme de 1ere S et a des bases en DSP, transformation de fourier qui est a peu pres ce que tout le monde voit en cycle scientifique superieur durant les deux premieres annees. Et je ne sais meme pas pourquoi tu le prends mal sachant que j'ai rien dit de mechant je crois.... Cela dit tu ne reponds pas a ma question... Qui est le moins poli, celui qui repond a des questions pas assez clairement ? Ou celui qui les elude dans son orgueil ? Allons bon !
"Barycentre tkt pas pour moi je connais."
Ben alors pourquoi me demander ce que c'est si tu connais ?!
"Filtre passe bas en code est un ensemble de condition si je suit ton raisonnement. "
Non absolument pas c'est du traitement du signal. Je ne me souviens pas avoir explique ce qu'etait un filtre passe-bas de toute facon cela serait bien trop complique ici sur ce forum. Je suis desole mais ce sont des notions tres simples a comprendre (et qui je le repete sont censes etre statistiquement su ou apercu a ce stade la des etudes) et avec une pletore d'exemples trouvables en moins de 5 minutes sur internet.
"Quand on pose une question, on essaye d'y repondre clairement."
Ben je ne sais pas ou je n'ai pas ete tres clair en fait. Je t'ai detaille l'algorithme point par point avec des notions precises en mathematiques.
Etre developpeur implique de la curiosite et de l'independance, si tu bloques a la moindre inconnue dans une phrase et que tu ne fais pas une petite recherche sur internet avant de t'assurer que tu es en legitime droit de te vexer car tu n'y comprends rien du tout de ce que ce p'tit con d'gars t'as ecrit en pensant t'aider.
"Merci de me sortir des notions mathematiques, sur papier c'est cool, sur code c'est différent. " Je n'ai pas compris la phrase. ![]()
Ah ouais en gros je crois avoir compris maintenant. Ce sont mes questions que tu prends mal j'ai l'impression.
Alors que je ne les pose non pas a titre ironique mais seulement pour savoir ton bagage scientifique et donc savoir a qui je parle. Rien de pedant la-dedans, faut pas s'enerver si vite. ![]()
Non je le prend pas mal. Enfin j'ai juste l'impression que tu veux étaler ta science...
Filtre passe bas ne sont pas des conditions? Tu me dis c'est rapide à comprendre mais trop difficile à écrire, donc de ce constat tu devrais te dire qu'il faudrait peut-être poser ta solution dans un langage plus compréhensible pour ton auditoire, içi des notions directement lié aux codes.
http://fr.wikipedia.org/wiki/Filtre_passe-bas
Écoute moi ce que je te reproche c'est que je posais une question en javascript, au delà de mon parcours perso, me balancé des maths c'est pas le plus approprié, je sais pas au lieu de "filtre" je dirais "conditions" (mm si c'est pas le cas apparemment). Je n'ai pas fait bcp de math, donc effectivement le filtre passe bas je m'en souviens plus dans ses détails, mais j'ai fait bcp de prog, un prof ne m’a jamais sortit "fais un filtre passe bas à ton résultat" il dirait plutôt "fais des conditions, fais une fonction de calcul"ect... Enfin tu vois ce que je veux dire?
Si quelqu'un n'ayant pas fait de math(ça ne l’empêche en rien pour programmer), il est obligé d'attendre que tu adapte ton langage? On fait bcp d'aller retour pour rien.
C'est sympas de m'avoir répondu, mais sans te donner de leçon, la prochaine fois écris avec des mots liè à la programmation.
pour info: j'ai fait un DUT SRC+ Licence pro en communication et Multimédia.
golbat, le probleme que tu as est un probleme de curve-fitting. C'est un probleme de modelisation ("qu'est ce qu'un cercle?") et d'algorithmique ("est ce que cet ensemble de point est un cercle?"). Ce n'est pas un probleme de programmation en javascript. Tu aurais le meme probleme dans n'importe quel langage.
J'imagine que c'est pour cela que tbop2 a repondu a la question avec des termes algorithmiques. Parcequ'en terme de code c'est complique a expliquer. Les details de hauts niveau sont bien plus simple a comprendre.
De facon generale, une fois que l'on connait les bons termes, trouver la solution tout seul se fait a coup de google. Ici les termes sont dans l'ordre: Barycentre, distance, moyenne, ecart-type, filtre passe-bas. Personnellement, j'attends tout le monde avec un niveau de technicien (bac +2) d'etre capable de resoudre le probleme un fois les bonnes notions identifies.
Je crois que tu as un léger problème de complexe d'infériorité avec la science parce que je ne vois pas ce "qu'étaler" de la science de 1ère S et de première voire deuxième année du supérieur m'apporterait comme honneur ? :|
" Tu me dis c'est rapide à comprendre mais trop difficile à écrire, donc de ce constat tu devrais te dire qu'il faudrait peut-être poser ta solution dans un langage plus compréhensible pour ton auditoire, içi des notions directement lié aux codes. "
Mais je suis pas là pour faire un cours de série de fourier ou de filtre passe-bas ! Ca servirait à quoi ? Autant voire un cours bien illustré sur internet =, avec des graphes, des vraies équations et des algorithmes donc cf première réponse : google avant toute chose et ensuite si on bloque on demande de l'aide.
"mais j'ai fait bcp de prog, un prof ne m’a jamais sortit "fais un filtre passe bas à ton résultat" il dirait plutôt "fais des conditions, fais une fonction de calcul"ect... Enfin tu vois ce que je veux dire? "
Mais un filtra passe-bas n'a absolument aucun rapport avec une condition :| Un filtre passe-bas est un filtre passe-bas. Ca n'a juste rien à voir pourquoi je devrais utiliser un autre mot que le mot précis. Non je ne vois pas où tu veux en venir du tout... c'est pas parce que t'as pas vu une notion dans le passé (d'où ma première question sur ton niveau d'étude après coup) que je devrais appeler un concept au lieu d'un autre ! Si on t'a jamais dit de faire un filtre passe-bas c'est qu'on t'a jamais dit de faire un filtre passe-bas... Ben il n'est jamais trop tard pour commencer ![]()
Qui plus est le coup des filtre passe-bas en reconnaissance de motif c'est le BA-Ba. Tu tapes "gyroscope" ou "GestureRecognize"r tu verras que la doc Apple attends pas 3 lignes pour conseiller de lisser tous les signaux par des filtres... donc bon ces des termes très généraux qu'on rencontre souvent en programmation.
"Si quelqu'un n'ayant pas fait de math(ça ne l’empêche en rien pour programmer), il est obligé d'attendre que tu adapte ton langage? On fait bcp d'aller retour pour rien. "
Mais quelle mauvaise foi ! C'est pour ça que je t'ai posé une question ! Et Godrik a raison il est étonnant d'être à bac + 3 et de ne pas savoir ce qu'est un filtre passe-bas et un iso barycentre. Maintenant personne ne te l'a reproché (enfin si ne pas savoir ce qu'est un barycentre et le demander sur un forum c'est un peu de la flemmardise ;) ) mais... comment tu veux qu'on le devine ?
"C'est sympas de m'avoir répondu, mais sans te donner de leçon, la prochaine fois écris avec des mots liè à la programmation. "
Non mais sans te donner de leçon j'espère pour toi que tu réduis pas la programmation à des if et des boucles ? La programmation sans l'algorithmique et par conséquent sans parler de mathématiques ça ne va pas très loin voire pas loin du tout. L'A.I. des jeux elle se base sur quoi ? Les moteurs physiques ? graphiques ? Le traitement audio ? Photoshop ?
Enfin à force tu vas réussir à me faire culpabiliser alors je ne sais plus trop quoi dire... Ben écoute tiens je te donne un challenge. Fais ton problème sans utiliser de maths, avec des if, des boucles et un peu de soupe aux choux on en reparle dans quelques semaines sur ce même forum.
Ou alors cesse la mauvaise foi 5 secondes et dit nous où tu bloques dans le calcul du barycentre d'un nuage de point tout simplement (ps: ces deux termes sont communément utilisés ne serait-ce que dans Excel ne va pas me dire que "j'étale ma science").
Quelle mauvaise foi, je le dis avec le sourire et sans méchanceté mais quelle mauvaise foi :D
Cela dit il serait intéressant d'avoirun avis tiers, et ton avis de PhD Godrik ![]()
Je suis sûr que mon algorithme est assez naïf et à fort coût. Sans non plus aller partir dans les sphères de l'I.A. il doit y avoir quelques petites optimisations intéressantes à faire.
Quand je vois sur wikipedia qu'ils définissent l'isobarycentre comme : "This point minimizes the sum of squared Euclidean distances between itself and each point in the set." Je me dis qu'il doit bien y avoir un moyen de condenser cette information plus tôt et avec moins de calculs. Peut-être.
Boah pour la défense de l'auteur je suis bac +3 aussi et je me souvenais plus ce qu'étais le barycentre (même si en tapant ça sur google ça m'est tout de suite revenu) et on m'a jamais parlé de filtre passe bas non plus (et par contre quand j'ai tapé ça sur google j'ai fermé la page, de peur) ![]()
Bon ok ce topic est partit dans ce que je ne voulais pas.Je me suis emporté.
Excusez moi de pas me référer à des lois mathématiques que je ne maitrise pas (^^) quand je code.
Je ne résume pas la prog à des boucles, je voulais juste que tu parle clairement! Pas en énumérant une série de lois de math. Je te l'ai dit que tu m'as aidé.
Et je ne pensais pas venir sur le forum avec mon CV, je suis venus trouvez des réponses pas vous étaler ma vie. De base j’étaie partie sur autre chose(cf premier post) .
En même temps je n'est pas fait d'étude spécialisé prog, les algo j'en ai fait que partiellement et j'ai toujours passé plus de temps sur ma machine que sur un livre de math après le bac.
Je vais essayer de mon coter avec ce que j'ai là, on verra bien :D
Cool.
Je ne pense pas que l'on puisse résumer le problème plus succintement en fait, après sinon on va frôler le code et crois moi que le code tout seul ne t'aurait pas spécialement fait moins peur ![]()
Il y a des notions que tu vas devoir chercher tout seul, je te conseille de ne pas prendre en compte la remarque du filtre passe-bas dans un premier temps (elle est de toute façon facilement rajoutable en une ligne quand tu auras déjà fait le reste). Donc pour rappel :
1) Construire un nuage de points P avec les événements souris jusqu'à mouseup (sans filtrage)
2) Trouver l'isobarycentre G du nuage de points
3) Calculer les distances d(G,M) pour tout point M appartenant à P et les stocker quelque part
4) Calculer la moyenne des distances
5) Calculer l'écart type relatif et en déduire si en fonction d'un seuil de tolérance que tu auras toi-même choisi ceci est un cercle ou non.
Cela se base sur le principe qu'un cercle est par définition l'ensemble des points équidistant à un point M, dont le point M est aussi l'isobarycentre.
Dans le cas d'un cercle l'étape 5 indiquera donc que la perturbation relative par rapport à la moyenne est nulle car tous les points sont à la même distance, ainsi pour tout point M de P d(G, m) est égale à la moyenne. Plus ta "perturbation" par rapport à la moyenne est grande plus ton écart type sera grand et c'est à toi de définir par expérience ou par principe à combien tu fixes le seuil de tolérance. Tout ça a été vu au lycée.
Une fois que tu auras terminé ça déjà ensuite tu pourras rajouter un petit filtre en entrée de ta capture des événements souris.
Ok merci pour la reponse, je vais essayé avec ta methode.
C'est le filtre passe bas que je comprend pas(je vois pas comment le faire mais je chercherais le moment venu)
Bref thx
tbop2, j'aurais fait qqch comme tu le dis.
A partir des points, j'aurais calculer le centre du cercle. Probablement en prenant le barycentre et pas l'iso barycentre (somme des vecteurs centre/point est nul). Ensuite, je calculerais la distance moyenne entr ele centre et tous les points. En dessous d'une certaine distance moyenne, ce n'est pas un cercle. Sinon, je compterais le nombre de point a distance comprise entre la ditance moyenne et + ou - 10 %. Si la plupart (>= 90%) respectent ce critere alors c'est un cercle.
Et je testerais ca avec differente entree utilisateurs. C'est tres cru, mais c'est probablement suffisant pour la plupart des applications.
En fonction de ce que l'on cherche a detecter, on peut relacher des contraintes. Par exemple, qqch qui matche une elipse peut etre considerer comme un cercle.
Ou encore, on peut lisser les points en entree pour compenser les peripherique d'entree peu precis.