三次元データのプロット、および表面の作製方法
60 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
m1_1,m1_2,...,m8_4,m8_5(計40点)それぞれのxyz座標データがあります。これらの点群を三次元空間にプロットし、隣接する点を繋ぐことで表面形状モデルを作製するためにはどうすれば良いでしょうか。
2 commentaires
Hernia Baby
le 27 Août 2021
すみません、これってどのような表面形状が正解なのでしょうか?
5点ずつ区切って形を確認してみましたが、表面のイメージがつかず。
教えていただけると幸いです。
以下のコードで確認しました。
xlsreadがここではエラーを出すので実行していません。
clc,clear,close all;
[a,~,~] = xlsread('test.csv');
a = reshape(a,5,3,[]);
figure
hold on
%
for i = 1:length(a(1,1,:))
plot3(a(:,1,i),a(:,2,i),a(:,3,i))
end
view([45 45 45])
Réponse acceptée
源樹 上林
le 14 Sep 2021
座標データと言うことですが、説明を聞く限り各変数は格子状に並んでいるようなのでそのままイメージ図の通りsurfで法線方向座標をプロットすれば形状確認はできそうに思えます。
とそう思ってCSVのデータプロットしてみたらそうでもなかった。XY方向にも動きがあるんですね。こういうときはdelaunayがお手軽で便利です。
m1_1 = [ 358.05338, 430.87082, 826.53064 ];
m1_2 = [ 326.88449, 437.67047, 850.28442 ];
m1_3 = [ 289.87347, 433.9791, 856.91333 ];
m1_4 = [ 252.77789, 420.93857, 838.33868 ];
m1_5 = [ 236.10527, 406.71243, 805.83411 ];
m2_1 = [ 354.6514, 461.47131, 810.47113 ];
m2_2 = [ 323.91965, 471.54459, 837.18304 ];
m2_3 = [ 289.70773, 472.93338, 845.51227 ];
m2_4 = [ 252.55437, 462.20703, 827.73413 ];
m2_5 = [ 237.63062, 442.59842, 792.58661 ];
m3_1 = [ 347.18051, 497.32794, 794.21545 ];
m3_2 = [ 323.71375, 510.78693, 822.89734 ];
m3_3 = [ 287.95007, 514.03876, 832.8432 ];
m3_4 = [ 251.94568, 499.6821, 818.96051 ];
m3_5 = [ 238.07593, 476.57538, 776.11658 ];
m4_1 = [ 342.39886, 525.78735, 776.37512 ];
m4_2 = [ 322.71704, 550.37683, 807.2923 ];
m4_3 = [ 284.51257, 549.69696, 822.16364 ];
m4_4 = [ 245.24339, 539.22327, 803.24414 ];
m4_5 = [ 238.00352, 507.22263, 760.30524 ];
m5_1 = [ 337.84744, 547.58301, 748.3476 ];
m5_2 = [ 323.07324, 579.12714, 779.57544 ];
m5_3 = [ 284.36349, 600.61273, 791.66931 ];
m5_4 = [ 242.84502, 573.34869, 772.87305 ];
m5_5 = [ 239.48238, 532.96143, 737.95685 ];
m6_1 = [ 343.68552, 561.8822, 716.70215 ];
m6_2 = [ 320.9787, 596.68811, 732.81891 ];
m6_3 = [ 287.44376, 609.18402, 748.54913 ];
m6_4 = [ 250.82326, 585.45685, 730.01233 ];
m6_5 = [ 241.52846, 548.89648, 711.6355 ];
m7_1 = [ 346.49258, 572.64832, 680.45886 ];
m7_2 = [ 322.8775, 599.43933, 690.47034 ];
m7_3 = [ 286.68451, 611.22833, 693.69623 ];
m7_4 = [ 258.4942, 586.58246, 687.50818 ];
m7_5 = [ 249.45985, 553.3764, 673.15729 ];
m8_1 = [ 349.63242, 573.29773, 644.07483 ];
m8_2 = [ 327.58649, 601.42102, 653.94299 ];
m8_3 = [ 291.32361, 610.70789, 658.89539 ];
m8_4 = [ 262.84415, 588.19733, 647.61121 ];
m8_5 = [ 249.68108, 557.64923, 638.48401 ];
mx = [
m1_1(1) m1_2(1) m1_3(1) m1_4(1) m1_5(1);
m2_1(1) m2_2(1) m2_3(1) m2_4(1) m2_5(1);
m3_1(1) m3_2(1) m3_3(1) m3_4(1) m3_5(1);
m4_1(1) m4_2(1) m4_3(1) m4_4(1) m4_5(1);
m5_1(1) m5_2(1) m5_3(1) m5_4(1) m5_5(1);
m6_1(1) m6_2(1) m6_3(1) m6_4(1) m6_5(1);
m7_1(1) m7_2(1) m7_3(1) m7_4(1) m7_5(1);
m8_1(1) m8_2(1) m8_3(1) m8_4(1) m8_5(1);
];
my = [
m1_1(2) m1_2(2) m1_3(2) m1_4(2) m1_5(2);
m2_1(2) m2_2(2) m2_3(2) m2_4(2) m2_5(2);
m3_1(2) m3_2(2) m3_3(2) m3_4(2) m3_5(2);
m4_1(2) m4_2(2) m4_3(2) m4_4(2) m4_5(2);
m5_1(2) m5_2(2) m5_3(2) m5_4(2) m5_5(2);
m6_1(2) m6_2(2) m6_3(2) m6_4(2) m6_5(2);
m7_1(2) m7_2(2) m7_3(2) m7_4(2) m7_5(2);
m8_1(2) m8_2(2) m8_3(2) m8_4(2) m8_5(2);
];
mz = [
m1_1(3) m1_2(3) m1_3(3) m1_4(3) m1_5(3);
m2_1(3) m2_2(3) m2_3(3) m2_4(3) m2_5(3);
m3_1(3) m3_2(3) m3_3(3) m3_4(3) m3_5(3);
m4_1(3) m4_2(3) m4_3(3) m4_4(3) m4_5(3);
m5_1(3) m5_2(3) m5_3(3) m5_4(3) m5_5(3);
m6_1(3) m6_2(3) m6_3(3) m6_4(3) m6_5(3);
m7_1(3) m7_2(3) m7_3(3) m7_4(3) m7_5(3);
m8_1(3) m8_2(3) m8_3(3) m8_4(3) m8_5(3);
];
T = delaunay(mx, my);
trisurf(T,mx,my,mz);
こんな感じであってますか?
4点で1面作るには4点が同一平面上にないと歪んでしまい、場合によってはまともに面が作れません。なので三角形で面を作成しています。
ところで「表面形状モデル」ということですが、形状データをファイル出力して別ソフトに読ませるなどの利用ですか?それともプロットまでのことを指していますか?
2 commentaires
Hernia Baby
le 15 Sep 2021
delaunay関数は初めて知りました
少しコンパクトにしたので、コメントにて補足しておきます
A = readmatrix('test.csv',"OutputType","double");
X_mat = reshape(A(1:3:end-2 ),[],5);
Y_mat = reshape(A(2:3:end-1 ),[],5);
Z_mat = reshape(A(3:3:end ),[],5);
T = delaunay(X_mat,Y_mat);
trisurf(T,X_mat,Y_mat,Z_mat);
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur 表面プロットとメッシュ プロット dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!