You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于3D浓度矩阵计算内部椭球的纵横比

3D浓度矩阵椭球纵横比计算方案

步骤1:提取0.5等值面的所有坐标点

你之前用的contour3返回的是三维等高线的分段数据,需要额外解析才能拿到完整的边界点集,推荐直接用isosurface函数提取完整的0.5等值面点集,操作更简单:

% 生成网格坐标,若你的矩阵对应实际物理间距,可将1替换为对应步长dx/dy/dz
[x,y,z] = meshgrid(1:size(C,2), 1:size(C,1), 1:size(C,3));
% 提取取值为0.5的等值面
iso = isosurface(x,y,z,C,0.5);
% 取出所有边界点的三维坐标,格式为[N,3],N为边界点总数量
points = iso.vertices;

步骤2:计算椭球三个主轴长度

椭球的主轴方向可以通过边界点的主成分分析(PCA)得到,主轴长度和对应特征值的平方根成正比:

% 点集去中心化,将坐标原点移到椭球中心
points_centered = points - mean(points, 1);
% 计算点集的协方差矩阵
cov_mat = cov(points_centered);
% 计算特征值和特征向量,eig默认返回升序排列的特征值
[eigen_vecs, eigen_vals] = eig(cov_mat);
% 提取三个主轴的半轴长度,按从大到小排序
semi_axes = sqrt(diag(eigen_vals))';
semi_axes = sort(semi_axes, 'descend');

得到的semi_axes三个值分别对应椭球的半长轴、半中轴、半短轴长度。

步骤3:计算纵横比

3D椭球的纵横比有两种常用定义,按需选择即可:

  • 通用3D纵横比:最长轴/最短轴,计算方式为 aspect_ratio = semi_axes(1)/semi_axes(3)
  • 若需要某投影面的2D纵横比,比如xy平面的纵横比,计算方式为 semi_axes(1)/semi_axes(2)

如果你的矩阵坐标对应实际物理尺度,只需要在第一步生成x/y/z网格时把单位步长替换为实际物理步长即可,纵横比本身是比例值,不受尺度缩放影响。

内容的提问来源于stack exchange,提问作者Sora

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 08:06:02