3軸加速度の結果から体積を求めたいです
7 views (last 30 days)
Show older comments
3軸加速度計の結果から、以下の式で3次元にプロットした結果の95%を含む体積を求めようとしています。
4pi / 3×(中心から楕円までの最大長)×(最小長)×(2軸に直行する軸の長さ)
こちらの最大長、最小長、2軸に直行する軸の長さを求める方法の模索に苦慮しています。
これらを求める方法を教えて頂けると幸いです。
4 Comments
Hernia Baby
on 5 Mar 2022
ありがとうございます
楕円体が回転体なのか等でアプローチが変わると思います
楕円体が原点とx,y,z軸を通るなら以下に近いアプローチが取れますがいかがですか?
clc,clear
[X,Y,Z]=ellipsoid(0,0,0,6,3.25,3.25);
plot3(X(:),Y(:),Z(:),'--k')
hold on
surf(X,Y,Z,'EdgeColor','none','FaceAlpha',.2)
xline(0)
yline(0)
idx(:,:,1) = abs(X) == max(abs(X),[],'all');
idx(:,:,2) = abs(Y) == max(abs(Y),[],'all');
idx(:,:,3) = abs(Z) == max(abs(Z),[],'all');
for ii = 1:length(idx(1,1,:))
scatter3(X(idx(:,:,ii)),Y(idx(:,:,ii)),Z(idx(:,:,ii)),'red','filled')
end
Accepted Answer
Hernia Baby
on 5 Mar 2022
体積演算まで書いておきます
clc,clear
ここでは原点中心とした楕円体を作成しています。
[X,Y,Z]=ellipsoid(0,0,0,6,3.25,3.25);
fig(X,Y,Z);hold off;
X軸、Y軸、Z軸上で絶対値が最大となる点をとります
X,Y,Zは行列なので行と列での最大を探します
idx(:,:,1) = abs(X) == max(abs(X),[],'all');
idx(:,:,2) = abs(Y) == max(abs(Y),[],'all');
idx(:,:,3) = abs(Z) == max(abs(Z),[],'all');
絶対値なので2点ずつ現れます
fig(X,Y,Z)
for ii = 1:length(idx(1,1,:))
scatter3(X(idx(:,:,ii)),Y(idx(:,:,ii)),Z(idx(:,:,ii)),'red','filled')
end
さて4pi / 3×(中心から楕円までの最大長)×(最小長)×(2軸に直行する軸の長さ)
つまりを求めていきましょう
a = max(X(idx(:,:,1)));
b = max(Y(idx(:,:,2)));
c = max(Z(idx(:,:,3)));
V = 4/3*a*b*c;
fprintf('最大長:%d\n最小長:%d\n2軸に直行する軸長さ:%d\n体積:%d',a,b,c,V);
以下は楕円体の図を描写する関数です
function [] = fig(X,Y,Z)
figure
plot3(X(:),Y(:),Z(:),'--k')
hold on
surf(X,Y,Z,'EdgeColor','none','FaceAlpha',.2)
xline(0)
yline(0)
end
3 Comments
Hernia Baby
on 6 Mar 2022
懸念していた部分はこの楕円体が平行移動したり、X,Y,Z軸にθ°回転するケースです。今回はそれはなさそうとの事なので記載してません。また何かありましたら、気軽にどうぞ。
More Answers (0)
See Also
Categories
Find more on ライティング、透明度、およびシェーディング in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!