Delimiter une zone vectoriel

Discutez d'informatique ici !
BleuRaven
Messages: 7
Enregistré le: 06 Aoû 2015, 18:53

Delimiter une zone vectoriel

par BleuRaven » 06 Aoû 2015, 18:58

Bonjour, voila mon problème je voudrais faire une zone 2D en cercle pour la souris mais je n'arrive pas a calculer ceci.

Le calcule de base est assez simple mais.
La position de la souris est enregistrer en Vector 2D (xy) la variable se nomme: MousePosition
Je peu déplacer la souris comme je veux.

Image

Donc je rajoute des limite en modifient la valeur et en rajoutent un max et un min au xy de la (MousePosition)

Image

Du coup me voila avec une limite carrer. Mais se que je veux c'est un cercle en regardent sur google j'ai vu qu'on peu utiliser une normalisation.

Image

ça marche bien mais le problème c'est que c'est pas se que je veux. Ici la souris va uniquement se déplacer sur l'arc du cercle. et moi il faut que la souris puisse rentrer dans son diamètre comme ici.

Image

ça fait un petit moment que je recherche mais je trouve rien :/
Si vous pouvais m’aider ça serais super et désoler pour les fautes.



danyL
Membre Rationnel
Messages: 682
Enregistré le: 03 Jan 2015, 13:29

par danyL » 06 Aoû 2015, 19:52

BleuRaven a écrit:Bonjour, voila mon problème je voudrais faire une zone 2D en cercle pour la souris mais je n'arrive pas a calculer ceci.

Le calcule de base est assez simple mais.
La position de la souris est enregistrer en Vector 2D (xy) la variable se nomme: MousePosition
Je peu déplacer la souris comme je veux.

Image

Donc je rajoute des limite en modifient la valeur et en rajoutent un max et un min au xy de la (MousePosition)

Image

Du coup me voila avec une limite carrer. Mais se que je veux c'est un cercle en regardent sur google j'ai vu qu'on peu utiliser une normalisation.

Image

ça marche bien mais le problème c'est que c'est pas se que je veux. Ici la souris va uniquement se déplacer sur l'arc du cercle. et moi il faut que la souris puisse rentrer dans son diamètre comme ici.

Image

ça fait un petit moment que je recherche mais je trouve rien :/
Si vous pouvais m’aider ça serais super et désoler pour les fautes.


bonsoir
l'équation d'un cercle de rayon R et de centre (x=0 ; y=0) est :
x² + y² = R²

la souris est à l'intérieur du cercle si :
x² + y² <= R²
(cas particulier de ton dessin)

si le centre du cercle n'est pas (x=0 ; y=0) mais (x=a ; y=b) alors l'équation du cercle est :
(x-a)² + (y-b)² = R²
et la souris est à l'intérieur du cercle si :
(x-a)² + (y-b)² <= R²
(cas général)

http://homeomath2.imingo.net/cercle1.htm

BleuRaven
Messages: 7
Enregistré le: 06 Aoû 2015, 18:53

par BleuRaven » 06 Aoû 2015, 21:43

Merci beaucoup de votre réponse mais c'est pas vraiment se que je recherche. Vous m'avais expliquer comment détecter si la souris et a l’extérieur ou a l’intérieur mais je veux plutôt savoir comment la contenir a l’intérieur.

Voila globalement le code que j'ai fait.

Quand je bouge la souris ça va modifier donc bouger une variable vector2D (MousePosition) sur une grille 2d.
La variable (MousePosition) va constamment être recalculer en rajoutent en max de 50u (MaxPosition) et un min de -50u (MinPosition) sur x et y.
Du coup (MousePosition) va constamment rester dans un carrer de 100x100 u sans en sortir.
Et se que je veux faire c'est calculer la variable (MaxPosition) et (MinPosition) a fin d'avoir une zone en cercle a la place d'un zone en carrer. J'ai cru comprendre qu'il fraudais utiliser un square inverser mais je sais pas du tout se que c'est. merci de votre réponse.

danyL
Membre Rationnel
Messages: 682
Enregistré le: 03 Jan 2015, 13:29

par danyL » 06 Aoû 2015, 23:15

'square inverser' je ne sais pas non plus
je pensais à racine carrée mais c'est 'square root' en anglais

tu travailles en quel langage ?
tu peux peut etre copier-coller ton code ici

avec un cercle tu ne peux pas donner un min et un max général à x et à y comme pour un carré
le x et le y dépendent l'un de l'autre

dans ton code à l'endroit où tu recalcules MousePosition, au lieu de tester si x>MinPosition et x<MaxPosition il faut tester si x² + y² <= R² (avec R=50 si j'ai bien compris)
si c'est vrai, la souris est dans le cercle et il n'y a rien à faire
si c'est faux, la souris est en dehors du cercle et il faut calculer de nouvelles coordonnées à l'intérieur ou sur le cercle

je te propose de les calculer de cette façon :
http://www.cjoint.com/c/EHgwi1ffLwu
si la souris est en A donc en dehors du cercle, on prend B comme nouveau point
B est sur le cercle, et on garde la direction de la souris
si cela te va, je te donnerai les formules demain

BleuRaven
Messages: 7
Enregistré le: 06 Aoû 2015, 18:53

par BleuRaven » 08 Aoû 2015, 17:32

Hey, j'avais pas vu que tu m'avais répondu j'ai pas reçus de mail.

Je travail en C++ mais en virtual programmation avec le blueprint de ue4.
Image

Oui c'est bien ça, ^^ mais j'arrive uniquement avec un carrer. Avec un cercle j'ai pas encore trouver comment faire a part en utilisent une normalisation mais du coup c'est seulement sur le bord du cercle. :/

Merci beaucoup je vais essayer ceci. ^^

danyL
Membre Rationnel
Messages: 682
Enregistré le: 03 Jan 2015, 13:29

par danyL » 08 Aoû 2015, 22:31

ah ok c'est de la programmation visuelle
c'est intéressant (et esthétique !) mais si jamais tu as accès au code C++ correspondant, ce sera (peut-être ?) plus facile de faire tes modifs directement en C++ (si tu es à l'aise en programmation en mode "texte")

pour les formules, si tu ne les as pas déjà :
http://www.cjoint.com/c/EHivs3jhJAx
le point A(xA;yA) est la position de la souris que tu reçois
le point B(xB;yB) est la nouvelle position de la souris
avec pythagore :
OA² = OC² + OD²
OA² = xA² + yA²
=> OA = racine carrée (xA² + yA²)

avec thalès :
OE/OC = OB/OA
xB/xA = R/OA
=> xB = xA * R/OA

OF/OD = OB/OA
yB/yA = R/OA
=> yB = yA * R/OA

pour la logique :
(xA ; yA) = mousePosition
si (xA² + yA² > R²) est vrai alors
....xB = xA * R/(racine carrée (xA² + yA²))
....yB = yB * R/(racine carrée (xA² + yA²))
....mousePosition = (xB ; yB)
fin si

à insérer à la place des blocs de test de min/max

je ne connais pas blueprint, apparemment :
"si xxx est vrai alors xxx" correspond au bloc Branch
les calculs se font avec les blocs + x etc
le plus compliqué semble de calculer la racine carrée

BleuRaven
Messages: 7
Enregistré le: 06 Aoû 2015, 18:53

par BleuRaven » 09 Aoû 2015, 11:59

Oui le BluePrint est vraiment un super system, mais je pourrais par le faire en c++ a moins de crée un fonction juste pour ça du coup je le continu en bp c'est plus simple. ^^

Merci beaucoup ! :D
Image
J'ai suivi se que tu a dit et maintenant ça marche. J'ai aussi rajouter un +1 au Rayon max pour éviter les marges d'erreur. (Il arriver que la sourie rester bloquer sur le rayon ) ^^

danyL
Membre Rationnel
Messages: 682
Enregistré le: 03 Jan 2015, 13:29

par danyL » 09 Aoû 2015, 14:55

cool :++:

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 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