平面点从基准平面映射到指定目标平面的坐标转换方法咨询
平面点坐标转换解决方案
前提约定
- 统一记球心坐标为
O = (o_x, o_y, o_z),球半径为R - 灰色基准平面记为$P_1$:法向量
n1 = [1, 0, 0],平面一般式为x = d1(d1为已知常数项) - 黄色目标平面记为$P_2$:法向量
n2 = [a, b, c](可提前做单位化处理),平面一般式为a*x + b*y + c*z = d2(d2为已知常数项) - 基准平面上已知点记为
P1_p = (x1, y1, z1),满足$P_1$平面方程且在球面上
方案1:基于公共旋转轴的旋转变换(对应同球面、绕轴旋转映射的场景)
两个平面的交线即为你系统的旋转轴,通过旋转变换直接映射坐标:
- 转换到球心局部坐标系,消去平移影响:
P1_local = (x1 - o_x, y1 - o_y, z1 - o_z) - 计算公共旋转轴的单位向量:旋转轴方向同时垂直于两个平面的法向量,通过叉乘得到后做单位化处理
u = normalize(cross(n1, n2)) - 计算两个平面的旋转夹角:通过法向量的点积计算夹角
θ = arccos(dot(n1, n2) / (|n1| * |n2|))
注:如果旋转方向和右手定则不符,可将θ取负值调整
- 用罗德里格斯旋转公式计算旋转后的局部坐标:
P2_local = P1_local * cosθ + cross(u, P1_local) * sinθ + u * dot(u, P1_local) * (1 - cosθ) - 转换回全局坐标系,得到目标平面上的对应点:
P2_p = (P2_local.x + o_x, P2_local.y + o_y, P2_local.z + o_z)
方案2:基于射线求交的变换(对应同一条球心射线与两个平面的交点映射场景)
如果你的对应点定义为从球心出发、过基准面点的射线,与目标平面的交点,可直接用射线平面相交公式计算:
- 计算射线的方向向量:
dir = normalize((x1 - o_x, y1 - o_y, z1 - o_z)) - 代入目标平面方程求解缩放系数t:
t = (d2 - a*o_x - b*o_y - c*o_z) / (a*dir.x + b*dir.y + c*dir.z) - 计算目标点坐标:
P2_p = (o_x + t*dir.x, o_y + t*dir.y, o_z + t*dir.z)
内容的提问来源于stack exchange,提问作者kisuli
相关产品推荐
相关产品推荐

