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 :
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);
}
Si vous avez besoin de d'infos ou de détails supplémentaires, dites le moi !
Merci beaucoup,
Fab.