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

已知两点确定的3D直线与已知2D点,如何求该点的Z值

计算共线点P3的Z值

要计算P3的Z值,前提是P1、P2、P3三点共线(否则无法通过前两点确定第三点的Z值)。我们可以利用空间直线的参数方程来推导:

推导过程

空间中两点P1(x₁,y₁,z₁)和P2(x₂,y₂,z₂)确定的直线,参数方程为:

x = x₁ + t*(x₂ - x₁)
y = y₁ + t*(y₂ - y₁)
z = z₁ + t*(z₂ - z₁)

其中t是参数,对于共线的P3(x₃,y₃,z₃),我们可以通过x或y的坐标先求出t,再代入z的方程得到z₃。

具体步骤

  1. 计算x方向的差值dx = x₂ - x₁,y方向的差值dy = y₂ - y₁
  2. 选择非零的差值来计算t:
    • 如果dx ≠ 0,则t = (x₃ - x₁)/dx
    • 如果dx = 0(说明直线垂直于x轴),则用dy计算t = (y₃ - y₁)/dy
  3. 将t代入z的参数方程,得到z₃ = z₁ + t*(z₂ - z₁)

PHP实现代码

function calc_z3($p1, $p2, $p3) {
    // 提取坐标
    $x1 = $p1[0]; $y1 = $p1[1]; $z1 = $p1[2];
    $x2 = $p2[0]; $y2 = $p2[1]; $z2 = $p2[2];
    $x3 = $p3[0]; $y3 = $p3[1];
    
    $dx = $x2 - $x1;
    $dy = $y2 - $y1;
    
    // 处理P1和P2重合的情况
    if ($dx == 0 && $dy == 0) {
        // 两点重合,直接返回P1的Z值(或根据需求抛出错误)
        return $z1;
    }
    
    // 计算参数t
    if ($dx != 0) {
        $t = ($x3 - $x1) / $dx;
    } else {
        $t = ($y3 - $y1) / $dy;
    }
    
    // 计算P3的Z值
    return $z1 + $t * ($z2 - $z1);
}

// 测试示例
$p1 = [0,0,0];
$p2 = [20,10,1];
$p3 = [30,15];
$p3z = calc_z3($p1,$p2,$p3);
echo $p3z; // 输出1.5

验证示例

代入你的测试数据:

  • dx = 20-0=20,t=(30-0)/20=1.5
  • z3 = 0 + 1.5*(1-0) = 1.5,结果符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 12:20:40