Voici le code que j'utilise pour déterminer la distance entre un point p et une hélice en 3D en hlsl et qui ne marche pas du tout.
La démarche consiste a projeter le point p sur le cylindre sur lequel est tracée l'hélice. A partir de là on se retrouve avec un point 2d à projeté sur la droite tracée par l'hélice sur le cylindre, puis enfin à récupérer les coordonnées 3d de ce point.
- Code: Tout sélectionner
// a = rayon b = fréquence c = décalage sur z d = décalage sur x et y
float
x = p.x, y = p.y, z = p.z,
a = sphere.x, b = sphere.y, c = 1 / Cycle, d = sphere.z;
// Projection du point sur le cylindre de l'hélice le long de l'axe z
float2 n = normalize(float2(x - d, y - d));
// coordonnée cylindriques
float
X = atan2(n.y, n.x), // [-pi, pi]
Y = z % b, // [0,b];
// projection des coordonnées cylindrique sur le droite dessinée par l'hélice sur le cylindre
float2
v = normalize(float2(2 * PI, b)),
H = dot(float2(X, Y), v) * v;
// récupération du point en 3d de l'hélice
float3 M = float3(a * cos(H.x) + d, a * sin(H.x) + d, b * floor(z / b) + H.y * b + c);
return length(p - M);
Merci