[C#] UI Image qui se ballade dans une ellipse

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Avatar de l’utilisateur
Yazza
Messages : 31
Inscription : 21 Avr 2015 10:45
Localisation : Paris

[C#] UI Image qui se ballade dans une ellipse

Message par Yazza » 21 Avr 2015 11:29

Bonjour la communauté,

Je débarque sur le forum avec un premier problème que voici :
J'ai une UI Image qui se balade sur mon écran grâce à un Camera.WorldToScreenPoint().
Je souhaite limiter sa position dont les extrêmes forment une ellipse centrée.
En piochant dans Wikipedia j'ai pu trouver les formules qui m'intéressent, voila ma logique :
- Je test si mon point est en dehors de l'Ellipse
- Si non, je laisse mon point ou il est
- Si oui, je calcul l'angle entre les abscisses et ce point
- Puis je me sers de cette angle pour calculer sa position sur l'ellipse
Cela marche comme je souhaite, mais à la frame où mon point sort de l'Ellipse j'aperçois un gros écart par rapport à la frame précédente (une cinquantaine de pixels) ! En revanche mon point est bien sur une courbe Ellipsoïdale qui semble être la bonne...
L'écart diminue lorsque le point s'approche d'un des deux axes...

Je vous laisse mon code, est-ce que je suis passé à côté de quelque chose, est-ce que je dois revoir ma logique ?

Bisous

Code : Tout sélectionner

// screenPositionFromCenter est un Vector2 qui est la position de mon UI Image à partir du centre de l'écran
float longueur = Rayon;
float largeur = Rayon / 2;

float ellipse = (screenPositionFromCenter.x * screenPositionFromCenter.x) /
	(longueur * longueur) +
	(screenPositionFromCenter.y * screenPositionFromCenter.y) /
	(largeur * largeur);

float angle = Vector2.Angle (Vector2.right, screenPositionFromCenter);
if (screenPositionFromCenter.y < 0)
	angle *= -1;

if (ellipse >= 1) {
	screenPositionFromCenter.x = longueur * Mathf.Cos (angle * Mathf.Deg2Rad);
	screenPositionFromCenter.y = largeur * Mathf.Sin (angle * Mathf.Deg2Rad);
}
Je me contredis toujours, voire jamais.

Avatar de l’utilisateur
Yazza
Messages : 31
Inscription : 21 Avr 2015 10:45
Localisation : Paris

Re: [C#] UI Image qui se ballade dans une ellipse

Message par Yazza » 21 Avr 2015 20:57

PROBLEM SOLVED !

Après des heures de torture, j'ai trouvé ce qui cloche :
Ce qui cloche c'est que je suis extrêmement nul en Math !

L'équation donné par Wikipedia fonctionne, mais l'angle utilisé dans la formule n'est pas l'angle polaire que l'on connait, d'où mon erreur.
En fouillant les entrailles d'internet je suis tombé sur ce forum de binoclard :
http://www.ilemaths.net/forum-sujet-290859.html
Et il s'avère que l'équation utilisant l'angle polaire est bien plus complexe.

Voila mon code avec cette equation, elle marche du feu de Dieu !

A bientôt,
Bisous

Code : Tout sélectionner

float longueur = Rayon;
float largeur = Rayon / 2;
float ellipse = (screenPositionFromCenter.x * screenPositionFromCenter.x) /
	(longueur * longueur) +
	(screenPositionFromCenter.y * screenPositionFromCenter.y) /
	(largeur * largeur);

float angle = Vector2.Angle (Vector2.right * 100, screenPositionFromCenter);
if (screenPositionFromCenter.y < 0)
	angle *= -1;
angle *= Mathf.Deg2Rad;

float rayon = (longueur * largeur) /
	Mathf.Sqrt (
		(largeur * largeur * Mathf.Cos (angle) * Mathf.Cos (angle)) +
	(longueur * longueur * Mathf.Sin (angle) * Mathf.Sin (angle))
);
Vector3 ellipsePosition = new Vector3 (
	rayon * Mathf.Cos (angle),
	rayon * Mathf.Sin (angle),
	0
);
Je me contredis toujours, voire jamais.

Répondre

Revenir vers « (C#) CSharp »