J'ai une question concernant le tracé d'une surface cylindrique dans Matlab. Mon jeu de données se compose d'un nuage de points de X, Y, Z
coordonnées avec des valeurs d'intensité correspondantes C
.Matlab trianguler et tracer le nuage de points cylindrique en 3D
Je peux les tracer en utilisant la fonction scatter3
:
figure
scatter3(X,Y,Z,8,C)
résultats dans l'image suivante:
Cependant, je voudrais tracer la surface de cet objet plutôt que les points. J'ai essayé d'y parvenir en utilisant la triangulation de Delaunay
tri = delaunay(X,Y);
figure
trisurf(tri,X,Y,Z,C,'FaceColor','interp')
Comme vous pouvez le voir sur l'image, le résultat est pas ce que je voudrais comme il y a des difficultés avec la triangulation. Pour moi, il semble que l'algorithme ne supporte pas bien le fait que je reçois les mêmes coordonnées X
et Y
plusieurs fois.
Suivant les exemples présentés à la page d'aide TriRep
j'ai essayé d'utiliser l'approche suivante:
dt = DelaunayTri(X,Y,Z);
tr = TriRep(dt, X, Y, Z);
hélas sans succès que je reçois le message d'erreur suivant lorsque vous appelez la fonction TriRep
:
? ?? Erreur lors de l'utilisation de ==> TriRep Le paramètre doit être 'double matrice'.
Je suppose que je dois limiter ma géométrie et je pensais que je trouve la solution dans Example 1 here en utilisant la fonction freeBoundary
- bien que je besoin de la sortie de la fonction TriRep
afin de calculer cela. C'est là que je suis coincé. Comme vous pouvez le voir, je ne suis pas un expert en méthodes de triangulation et j'apprécierais vraiment toute aide que vous pourriez offrir. Merci!
Merci de m'avoir indiqué dans cette direction. Je l'ai essayé et il semble beaucoup mieux mais toujours pas tout à fait ce que j'étais après. Actuellement, il y a trop peu de faces sur les surfaces et le cylindre est également fermé sur les extrémités supérieure et inférieure. Ce que j'avais à l'esprit était un cylindre ouvert avec autant de petites faces sur les murs latéraux que possible sans chevauchement. Avez-vous une idée de comment je pourrais y parvenir? –
en utilisant T = delaunayn (X, {'Qt', 'Qc', 'Qx', 'Q4'}); J'ai pu obtenir de nouveaux résultats qui sont vraiment proches de ce que je veux (je n'utiliserai pas la coque convexe car elle omettrait des points étant donné que le cylindre n'est pas complètement convexe). Mon dernier problème reste le fait que la face supérieure et inférieure du cylindre est fermée. Est-il possible de spécifier une «distance maximale de triangulation» dans delaunayn? Si je pouvais spécifier une longueur maximale de la face du triangle, alors je pourrais facilement éviter de remplir les faces supérieure et inférieure ... –
Juste une note: la boucle for descend au lieu de monter, donc vous n'avez pas à vous tromper avec l'indexation après suppression des lignes. –