[Résolu] [C#] Vector3.Angle ?

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
FabienTT
Messages : 67
Inscription : 06 Fév 2013 14:58

[Résolu] [C#] Vector3.Angle ?

Message par FabienTT » 21 Août 2014 17:30

Bonjour à tous,

bon je suis dans une situation qui au demeurant ne devrait pas être bien dure à résoudre, mais malgré tout, je n'y parviens pas.
je bosse avec des courbes de Béziers, et je voudrais placer les points de contrôle automatiquement en fonction de la position du point suivant ou du point précédent. Actuellement j'y arrive sans soucis en suivant le modèle standard d'interpolation (en fonction de la tangente).
Toutefois, ce n'est pas ainsi que je souhaite placer mes points de contrôle : je ne veux pas qu'ils suivent la tangente mais qu'ils se placent à 0, 90, 180 ou 270° directement, selon l'angle avec le point suivant (ou précédent).

Jusque là vous n'avez rien compris, une petite image s'impose donc :

Image

Actuellement je travaille sur le cas de la première partie de la courbe, qui, une fois résolu, devrait facilement s'appliquer aux autres situations.
j'ai donc mon point P1, associé au point de contrôle Q1, et mon point P2, qui permet avec P1, de déterminer la position de Q1. une belle courbe de Béziers.

Dans le cas présent je voudrais que Q1 soit placé à pi/2, car P2 est plus proche de pi/2 que de 2pi.
l'objectif est d'avoir les points de contrôle sur pi/2, pi, 3pi/2 ou 2pi, selon l'angle avec p2. et de même pour chaque point.

Pour cela, il suffit de regarder l'angle entre p1 et p2, et de placer Q1 en fonction.
j'utilise donc Vector3.Angle(p1,p2); mais le résultat retourné ne me convient pas elle change notamment avec la distance, alors que je ne m'intéresse qu'à l'angle
j'ai essayé avec d'autres paramètres (tangent, P2), sans succès.

Bien entendu, voici un extrait du code qui s'intéresse spécifique au premier point de la courbe, je me contente de regarder la valeur de l'angle :

Code : Tout sélectionner

if (i == 0) // first point of the bezier curve;
			
{
				Vector3 p1 = segmentPoints[i];
				Vector3 p2 = segmentPoints[i + 1];                
				
				Vector3 tangent = (p2 - p1);

				Vector3 q1 = p1 + scale * tangent;

				Debug.Log (Vector3.Angle(p1,p2)); //voir le texte

				controlPoints.Add(p1);
				controlPoints.Add(q1);
			}

J'imagine que je me plante bêtement sur un truc bidon, mais... je ne vois pas quoi, et j'ai tourné une partie de la journée sur ce soucis ><

Si vous avez besoin de d'infos ou de détails supplémentaires, dites le moi !
Merci beaucoup,
Fab.
Dernière édition par FabienTT le 22 Août 2014 10:30, édité 1 fois.

FabienTT
Messages : 67
Inscription : 06 Fév 2013 14:58

Re: [C#] Vector3.Angle ?

Message par FabienTT » 21 Août 2014 17:48

j'ai fais la même chose, en calculant l'angle entre p1 et la tangente :

Debug.Log (Vector3.Angle(p1,tangent));

je n'ai plus le problème de la distance, mais la valeur va de environ 10, à environ 167. ne devrait elle pas aller de 0 à 180 ?

Avatar de l’utilisateur
artemisart
Messages : 1893
Inscription : 21 Juin 2011 19:51
Localisation : Centre
Contact :

Re: [C#] Vector3.Angle ?

Message par artemisart » 21 Août 2014 21:29

Avant d'utiliser Angle pense à bien utiliser des directions et non des positions ;) (p1 est une position non ?).
Il faut aussi savoir que ça retourne le plus petit angle entre les 2 directions et non un angle orienté.

Tu peux aussi utiliser une autre technique : tu pose 4 points (gauche haut droite et bas par rapport à p1) et tu garde seulement le point le plus proche de p2.

FabienTT
Messages : 67
Inscription : 06 Fév 2013 14:58

Re: [C#] Vector3.Angle ?

Message par FabienTT » 21 Août 2014 21:48

Effectivement c'est une position, du coup, ça biaise forcément mon résultat ><

mais ta technique des 4 points me plait beaucoup, je vais tester ça demain !
Merci Art ! =)

FabienTT
Messages : 67
Inscription : 06 Fév 2013 14:58

Re: [C#] Vector3.Angle ?

Message par FabienTT » 22 Août 2014 10:30

ça marche d'enfer avec 4 points, pourquoi me suis-je compliqué ainsi la vie.

T'es le meilleur Arte, Merci ! =)

Fab.

Répondre

Revenir vers « Scripting »