Bonjour,
Le titre n'est peu être pas très explicite, mais je n'en ai pas trouvé de meilleur.

J'ai construit un cône avec meshgrid, et ayant un point donné aléatoire sur le cône, je souhaite trouver le point le plus proche se trouvant sur la "grille" (graphique) créee par la commande mesh. En d'autres termes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
%Construction du cône
r=1;h=2;
height=(0:h/45:h);
theta=(0:pi/45:2*pi);
[height,theta]=meshgrid(height,theta);
x = ((h-height)/h)*r.*cos(theta);
y = ((h-height)/h)*r.*sin(theta);
z = height;
%Point aléatoire
x_coord_s=-0.1022;
y_coord_s=-0.4806;
z_coord_s=1.0173;
%Affichage
mesh(x,y,z,'FaceColor',[0.2,0.35,0.2],'EdgeColor','black');
hold on;
plot3(x_coord_s,y_coord_s,z_coord_s,'w.','markersize',14);	
axis equal;
Le point le plus proche du point aléatoire appartient donc aux matrices x,y,z.
Voici ce que j'ai tenté et qui ne marche pas :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
[value1,index1]=min(abs(x_coord_s-x))
[val,index_x_column]=min(value1)
index_x_row=index1(1,index_x_column)
index_x_row et index_x_column devraient me retourner le numéro de ligne et de colonne correspondant à la coordonnée en x du point le plus proche de mon point aléatoire. J'ai fais le même bout de code pour les coordonnées en y et z, en changeant les indices x en y et z, puis j'ai testé en plotant le point :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
S=[x(index_x_row,index_x_column) y(index_y_row,index_y_column) z(index_z_row,index_z_column)];
plot3(S(1,1),S(1,2),S(1,3),'b.','markersize',14);
Seulement le point ne se trouve pas sur la "grille" (graphique) sur le cône (j'ai testé plusieurs points différents, changé le pas lors de la construction du cône...).
D'après ce que j'ai cru comprendre en testant, mesh construit les points un à un en parcourant les matrices x,y,z, donc j'ai pensé qu'en trouvant seulement une des coordonées la plus proche, j'aurais d'emblé le bon numéro de ligne et de colonne, que je copierai pour les deux autres coordonnées. Par exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
S=[x(index_x_row,index_x_column) y(index_x_row,index_x_column) z(index_x_row,index_x_column)];
Le point se trouve effectivement sur la grille, mais ce n'est pas le plus proche.
Voila...j'avoue ne pas comprendre pourquoi en cherchant le minimum de la différence entre les coordonnées de mon point aléatoire et les matrices x,y,z cela ne marche pas
Si vous avez des éclaircissement, merci d'avance...