python - 如何在python中获取由三个坐标定义的平面的倾斜角度?

标签 python numpy scipy coordinates

给定三个坐标(每个坐标都有 x、y 和 z 值),如何使用 numpy 和/或 scipy 来计算结果平面的倾斜(或倾角)?

a = np.array([32.49, -39.96,-3.86])

b = np.array([31.39, -39.28, -4.66])

c = np.array([31.14, -38.09,-4.49])

我想使用此计算来过滤屋顶段的 LiDAR 点云数据集。所以屋顶的角度在 30 到 60 度之间。

我知道我必须旋转由三个坐标定义的平面来计算所需的角度,但我不知道如何使用 numpy/scipy 来实现这一点。 我可能需要的是这样的轮换:

enter image description here enter image description here

更新:

Paul Panzer 的答案使得计算每个轴的平面角度成为可能。但是我如何才能旋转平面,以便获得多个三重点集在一个轴上可比较的角度呢?我的主要目标:我想使用两个最近的邻居点构建每个屋顶点的三角形并计算这些角度。例如,如果 30 度到 60 度之间有 50% 的角度,则屋顶将被归类为山墙。

最佳答案

以三个向量的两个差值的叉积为例

n = np.cross(b-a, c-a)

这将为您提供平面的法向矢量。它与任何坐标平面的角度将与您的平面与同一坐标平面的角度之和为 pi/2。

要计算法线向量和坐标平面之间的角度,只需标准化并取相应分量的反正弦

nn = n / np.linalg.norm(n)
angles = np.abs(np.arcsin(nn))

关于python - 如何在python中获取由三个坐标定义的平面的倾斜角度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42893410/

相关文章:

python - 使用 python(最好是 scipy)插值稀疏网格

python - 为什么 stat_density (R; ggplot2) 和 gaussian_kde (Python; scipy) 不同?

Python Scipy,插值数组到图像

python - python在for循环之前卡住列表吗?

python-3.x - 使用随机整数和跨列的有限总和创建 pandas 数据框

python - 使用用户指定的全局聚类系数高效生成随机图

python - 为数组赋值(Python、Numpy)

python - 从 Pandas 数据框中的字符串系列中获取总字数

python - 每次点击 API 端点时如何加载 WTF 表单类

python - 有孔结果的匀称多边形并集