如何获取拟合线性曲面的法向量以计算点到曲面距离?
获取poly11拟合平面的法向量及点到平面的距离计算
步骤说明
你拟合的poly11是线性平面,数学表达式为:
$$Z = c_1 + c_2X + c_3Y$$
其中c = coeffvalues(sf)返回的系数顺序是:$c_1$(常数项)、$c_2$(X的系数)、$c_3$(Y的系数)。
1. 构造法向量
将平面方程整理为隐式形式:$c_2X + c_3Y - Z + c_1 = 0$,对应平面标准式$AX + BY + CZ + D = 0$,法向量直接由系数$A,B,C$组成:
c = coeffvalues(sf); % 构造法向量 N = [c(2); c(3); -1];
2. 单位化法向量(关键)
计算点到平面的距离需要单位法向量,否则点积结果会被法向量的模长缩放:
% 单位化法向量 N_unit = N / norm(N);
3. 批量计算所有点到平面的距离
假设你的数据点是列向量$X2,Y2,Z2$,可以用矩阵运算批量处理:
% 将所有点整理为列向量矩阵 P = [X2(:), Y2(:), Z2(:)]'; % 计算点到P0的向量(广播复制P0匹配点数) vec = P - repmat(P0, 1, size(P, 2)); % 点积后取绝对值得到每个点的距离 distances = abs(dot(vec, N_unit, 1));
补充说明
- 因为
poly11是平面,法向量是全局固定的,不需要针对每个点计算;如果是高阶曲面,才需要逐点求梯度得到法向量。 - 注意
sf是拟合对象,不能直接和向量做减法,需用原始数据点或拟合平面上的点参与计算。
内容的提问来源于stack exchange,提问作者JFS
相关产品推荐
相关产品推荐

