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

PHP计算向量单位法向量及夹角时echo无输出问题如何解决

PHP向量单位法向量计算代码修复方案

核心错误点

  • 函数返回值未接收:PHP函数内部变量为局部作用域,无法在外部直接访问,你调用所有计算函数后均未将返回值赋值给全局变量,导致echo的变量全部为未定义状态,无输出。
  • 多返回值逻辑错误:函数执行到第一个return语句就会终止运行,原cross_product、norm函数中的多个return语句全部无效,仅能返回第一个值,无法拿到叉乘的j、k分量和向量B的模。
  • 入参未定义:调用anglebetween、normalunitvector时传入的参数均为未定义的全局变量,函数无法拿到正确输入值进行计算。

修复后代码

<html>
<head>
<title> Comprehensive FORM CGI program </title>
</head>
<body bgcolor=#DDDDDD>
<p>
<!-- The lines above are the standard html header -->

<?php
  // First get the input variables and their values
$A = $_POST['f_A'];
$B = $_POST['f_B'];

$Acomponent = explode(",", $A);
$Bcomponent = explode(",", $B);

$AX = (int)$Acomponent[0];
$AY = (int)$Acomponent[1];
$AZ = (int)$Acomponent[2];
$BX = (int)$Bcomponent[0];
$BY = (int)$Bcomponent[1];
$BZ = (int)$Bcomponent[2];

function dot_product($AX, $AY, $AZ, $BX, $BY, $BZ){
    $dotproduct = ($AX*$BX+$AY*$BY+$AZ*$BZ);
    return $dotproduct;
}

// 叉乘改为返回包含三个分量的数组
function cross_product($AX, $AY, $AZ, $BX, $BY, $BZ){
    $i = ($AY*$BZ-$AZ*$BY);
    $j = (-1)*($AX*$BZ-$AZ*$BX);
    $k = ($AX*$BY-$AY*$BX);
    return [$i, $j, $k];
}

// 模计算改为返回两个向量模的数组
function norm($AX, $AY, $AZ, $BX, $BY, $BZ) {
    $Anorm=sqrt(pow($AX,2)+pow($AY,2)+ pow($AZ,2));
    $Bnorm=sqrt(pow($BX,2)+pow($BY,2)+ pow($BZ,2));
    return [$Anorm, $Bnorm];
}

function anglebetween($dotproduct,$Anorm, $Bnorm) {
    // 增加除零判断避免报错
    if($Anorm * $Bnorm == 0) return 0;
    $angle = acos($dotproduct/($Anorm*$Bnorm));
    return $angle;
}

function normalunitvector($i,$j,$k) {
    $crossnorm=sqrt(pow($i,2)+pow($j,2)+ pow($k,2));
    // 增加叉乘模为0的判断(两向量共线无单位法向量)
    if($crossnorm == 0) return [0,0,0];
    $normaluniti = $i/$crossnorm;
    $normalunitj = $j/$crossnorm;
    $normalunitk = $k/$crossnorm;
    return [$normaluniti, $normalunitj, $normalunitk];
}

// 接收所有函数返回值
$dotproduct = dot_product($AX, $AY, $AZ, $BX, $BY, $BZ);
list($i, $j, $k) = cross_product($AX, $AY, $AZ, $BX, $BY, $BZ);
list($Anorm, $Bnorm) = norm($AX, $AY, $AZ, $BX, $BY, $BZ);
$angle = anglebetween($dotproduct,$Anorm, $Bnorm);
list($normaluniti, $normalunitj, $normalunitk) = normalunitvector($i,$j,$k);

// 输出结果
echo "夹角弧度值:".$angle."<br>";
echo "单位法向量i分量:".$normaluniti."<br>";
echo "单位法向量j分量:".$normalunitj."<br>";
echo "单位法向量k分量:".$normalunitk."<br>";
?>
<p>
<hr>
<p>
</body>
</html>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:06:00