Comment vérifier si un point se trouve dans ou hors d un tracé

Discussion générale entre passionnés et amateurs de mathématiques sur des sujets mathématiques variés
fredu
Messages: 3
Enregistré le: 26 Déc 2008, 02:01

Comment vérifier si un point se trouve dans ou hors d un tracé

par fredu » 26 Déc 2008, 02:18

Bonjour,

Ben en fait je suis de passage et j'ai une question un peu déplacée je pense... mais je la pose quand même^^

Je m'amuse à faire une petit application web pour le mémoire de mes études.

et j'ai un problème mathématique! (donc un gros problème ;))

Je fais un programme qui permet de faire défiler des images d'IRMs et de jouer avec des zones particulières de l'image.

Mon problème doit être assez simple au fond.

Je dois créer des tracés (des zones) puis vérifier si un point (le lieu du click) se trouve à l'intérieur ou à l'extérieur. Les droites qui composent le tracés ne peuvent pas se croiser et la zone doit être fermée

Pour le tracé...

Je dispose dun nombre variable de cordonnées x;y qui détermine les angles de mon tracé (qui est en fait un polygone).

Lorsqu'on clique, je dois savoir si une nouvelle coordonnée x;y (celle du click) se trouve dans ce polygone ou hors de ce polygone...

Ça peut paraitre bête mais camarade codeurs ont tous donné leur langue...

En tout cas merci d'avoir lu...

Et joyeuses fêtes



Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

par fatal_error » 26 Déc 2008, 02:53

Bonjour,

une approche que je sais pas si elle est optimisée mais que je pense qu'elle marche :
le point est entouré, s'il est "couvert" par 360°

Posons notre clic . On place deux points

On se place dans le ron
On peut calculer l'angle AOB, et l'angle "mini" BOA (des fois ca sera AOB mais ca c'est des tests...)
Du coup pour tous les couples de points on stock l'intervalle (angle mini, angle max)
La question, c'est alors de trouver si il existe des valeurs d'angle qui soit comprises dans aucuns des intervalles, donc on peut par exemple faire "fusionner" les intervalles qui ont une intersection non vide, et pis apres ben si il reste plus d'un intervalle, c'est que ca a chié et le point est en dehors. Je sais pas si je suis bien précis, anyway, dodotime for me


Edit:
on calcule l'angle et l'angle
qui nous donnent l'angle mini et maxi en les triants par ordre de grandeur.
la vie est une fête :)

fredu
Messages: 3
Enregistré le: 26 Déc 2008, 02:01

par fredu » 26 Déc 2008, 13:57

waou! merci pour la réponse en ces jours de fêtes (et donc de stress).

Je sens qu'il va falloir que je relise ta réponse un certain nombre de fois, avant de la comprendre, mais je suis définitivement décidé à y arriver.

Pour un codeur comme moi, ce genre de notion de math, c'est vraiment un avantage indispensable! Je suis habitué à apprendre via des tutos sur le graphisme, les langages informatique, mais existe-t-il ce genre de tuto sur les math... -> je vais me promener sur google!

En tout cas merci! Je rêve d'être bon dans cette discipline! Je poursuiverai la discuss une fois ta réponse assimilée!

A+ donc!

fredu
Messages: 3
Enregistré le: 26 Déc 2008, 02:01

par fredu » 26 Déc 2008, 19:26

Salut, j'ai cogité un bon moment et je bloque au moment ou tu commence à parler des intervalles d'angles.

Déjà, quelle est la différence entre l'angle AOB et BOA (mini/maxi). Pour moi, quelquesoit la position des points A, B et O (clic), l'angle sera le même?

Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

par fatal_error » 26 Déc 2008, 22:26

En fait, c'est la raison de mon edit, je m'étais planté. Je reviens dessus en essayant detre plus clair :

On pose I un point (5,0) -donc sur l'axe des abscisse-(premier cardan)
Maintenant suppose que tu as A(2,3) et B(2,2)
L'angle IOB est plus petit que l'angle IOA
Du coup on a un intervalle[IOB,IOA]

Maintenant supposes qu'on a un point C(2,2.5)
On va "revenir en arriere" a partir du point B
On a IOBdonc on a un intervalle [IOB,IOC]

Maintenant, on redimensionne notre intervalle obtenu :[IOB;max(IOA,IOC)]
et on continue avec le point D(x,y)
On calcule IOD et IOC
on a un intervalle [min(IOD,IOC),max(IOD,IOC)]
et on redimensionne notre intervalle:
[min(IOB,min(IOD,IOC));max(max(IOA,IOC),max(IOD,IOC))]
etc... sauf erreur.

De cette facon, a chaque ajout de point, on a une portion d'angle qui couvre O(0,0).
A la fin, si notre intervalle a la fin fait [0;359] et des poussières, ben c'est correct.

Bon, la méthode a un peu changé par rapport a avant, ici, on met l'intervalle a jour a chaque ajout de point. Ca permet d'éviter les erreurs d'arrondis.

Bien sur, ca suppose que les points definissent un un polygone "qu'on peut tracer sans lever le crayon".

rq:un soucis se pose si on a un point X et un point Y tq
X(2,3) et Y(2,-3)
En effet l'angle intercepté, c'est [IOY;360]U[0;IOX]
De manière générale, si on a un segment qui passe sous le point O, et dont ya une extremité d'ordonnée positive et une autre d'ordonnée négative, il faut faire une union d'intervalle.

J'espère avoir été plus clair. Il y a certainement quelques points à approfondir, mais ca ca donne les grandes lignes du raisonnement.
la vie est une fête :)

 

Retourner vers ⚜ Salon Mathématique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 11 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite