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 :
Le point le plus proche du point aléatoire appartient donc aux matrices x,y,z.
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;
Voici ce que j'ai tenté et qui ne marche pas :
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
4 [value1,index1]=min(abs(x_coord_s-x)) [val,index_x_column]=min(value1) index_x_row=index1(1,index_x_column)
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...).
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);
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 :
Le point se trouve effectivement sur la grille, mais ce n'est pas le plus proche.
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)];
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...![]()
Partager