如何找到具有2个3D点和1个已知2D点的3D线的第三个Z



我正在尝试解决这个问题,但不幸运:

$p1 = [0,0,0]; // x,y,z
$p2 = [20,10,1]; // x,y,z
$p3 = [30,15]; // x,y
$p3z = calc_z3($p1,$p2,$p3);

如何计算P3的Z ?

我是这样看的:

l12 = sqrt( (x2-x1)^2 + (y2-y1)^2 )
l13 = sqrt( (x3-x1)^2 + (y3-y1)^2 )
z3 = z1+((z2-z1)*l13/l12)

:

| (x3-x1)^2 + (y3-y1)^2 |^0.5
z3 = z1 + (z2-z1)*|-----------------------|
| (x2-x1)^2 + (y2-y1)^2 |

我找到了这个解决方案:

function calc_y3 ($x1,$y1,$x2,$y2,$x3) {
$m = ($y2 - $y1) / ($x2 - $x1);
$b = $y1 - $m * $x1;
$y3 = $m * $x3 + $b;
return $y3;
}
function calc_z3 ($x1,$y1,$z1,$x2,$y2,$z2,$x3,$y3) {
$x = $x2-$x1;
$y = $y2-$y1;
$z = $z2-$z1;
if ($x == 0 and $y == 0) // it's a point
return $z1;
if ($x == 0) // it's a 2d line
return calc_y3($y1,$z1,$y2,$z2,$y3);
if ($y == 0) // it's a 2d line
return calc_y3($x1,$z1,$x2,$z2,$x3);
$t = ($y3-$y1)/$y;
$z3 = $z1+$t*$z;
return $z3;
}

最新更新