Surface de la parcelle avec 3 vecteurs Matlab
J'ai besoin d'être en mesure de faire une surface de la parcelle à l'aide de données à partir de 3 vecteurs. J'ai trouvé des informations similaires, mais aucune méthode semble fonctionner avec mes données. Mon X et Y colonnes sont régulièrement espacés, mais pas dans l'ordre croissant. J'ai essayé différentes méthodes, mais aucune d'entre elles semblent me donner ce que je veux, qui est une simple surface linking à proximité des points ensemble. J'ai essayé le suivant:
[X Y]=meshgrid(x,y);
Z=griddata(x,y,z, X,Y);
surf(X,Y,Z);
Ce n'est pas exactement ce que je veux, parce qu'il crée une surface à z=0 et en fait ressemble plus à un volume de la parcelle que juste une surface. Il fonctionne aussi très lentement sur mon ordinateur (probablement à partir de la création de tous les gridpoints). Si je pouvais obtenir quelque chose qui n'a pas besoin d'autant de mémoire qu'elle serait l'idéal (à mon vecteurs ont environ 20k valeurs de chacun), mais ce n'est pas une nécessité.
***Edit: j'ai aussi essayé d'utiliser le scatteredInterpolant méthode à la ici,mais la fonction ne semble pas être reconnu par MATLAB et j'obtiens cette erreur:
Undefined function 'scatteredInterpolant' for input arguments of type 'double'.
Aussi, voici une image de mon problème:
Vous pouvez voir que nous ne pouvons pas voir sous la surface, il y a quelques plan z=0, la bloque.
Si vous avez quelque chose pour moi, toute aide est très appréciée.
Merci d'avance.
**Edit 2: j'ai ajouté de l'échantillon vecteurs, ils sont mon x,y et z les valeurs de la gauche vers la droite.
***Edit 3: Voici une image de la triangulation que je reçois. Comme vous pouvez le voir, certains points sont ignorés pour une raison quelconque, ce qui donne à ces long et bizarre à la recherche triangles bleus.
Mike
- Il aide si vous ne
Z(~Z)=NaN
? Ou si vous utilisez un autremethod
comme décrit dansdoc griddata
? Sinon, s'il vous plaît poster des exemples de code et des vecteurs de parfaitement reproduire le problème. - Quand je fais Z(~Z)=NaN-je obtenir un flatter les bas mais je ne peux toujours pas voir à travers elle, elle le ferme et forme un volume. Mes vecteurs sont assez grands, je vais essayer de trouver un moyen de les lier.
- Êtes-vous sûr que vos données ne contiennent pas les valeurs faibles qui sont tracées? Quel est le minimum de z où x et y sont entre 0,8 et 1,2? Aussi, n'oubliez pas d'essayer les différentes griddata options.
- Oui, dans le cas d'un nuage de points, nous pouvons clairement voir qu'il n'y a pas de points en vertu de la surface. J'ai essayé toutes les méthodes dans griddata et ils ont tous se ressembler. Est-il possible de le faire sans l'aide d'une grille? Il n'y a pas d'options qui semble juste à divers points et tente de faire le lien avec une surface si elles sont suffisamment proches l'un de l'autre? La grille de rendre les bords carrés et il n'est pas vraiment souhaitable/ La méthode de delaunay presque atteint, mais il semble y avoir une erreur avec la méthode de triangulation, qui donne d'étranges liens, les couleurs, et le même plan z=0 problème.
Vous devez vous connecter pour publier un commentaire.
Que les méthodes classiques ne semblent pas arriver, je vous suggère de le faire manuellement.
Z
matrice complète deNaN
valeurs. La taille de la matrice doit être la personne à charge sur votrex
ety
valeurs.x
,y
, paires et de mettre leur (moyen?)z
valeur dans la bonne position de votreZ
de la matrice.NaN
et d'interpoler les valeurs de leur valeur. Peut-être en utilisantfilter2
.surf
le tracé de la surface résultanteZ
matrice composée de prédiction, de valeurs et d'interpolations. Essayez de créer cette matrice vous-même en quelque sorte. Peut-être en commençant seulement avec survenant valeurs et ensuite de faire votre propre interpolations.Si vous avez des points qui sont décrits par des vecteurs, et vous voulez tracer eux, vous pouvez toujours utiliser une Delauny triangulation. La fonction dans matlab est appelé Tri=delauny(X,Y,Z). Les données générées par cette fonction peut être décrite avec soit trimesh(Tri,X,Y,Z) ou trisurf(Tri,X,Y,Z). Gardez à l'esprit trisurf est uniquement pour les données 3D. Si vous souhaitez ajuster la transparence de parcelles dans votre graphique utiliser le alpha réglage.
J'espère que cette aide
Pour moi, il semble que vous juste besoin de trier vos données avant de traçage.
Voici un exemple qui, je crois, est similaire à votre cas (puisque je ne pouvais pas télécharger vos données).
La première figure qui en résulte est très problématique surface:
La deuxième figure contient la surface désirée: