dtrn74832 2017-04-23 12:38
浏览 71
已采纳

php在2D中查找点的距离和线段而不是线

I have two point of a line like p1(a,b) and p2(c,d) my point is X(x,y)

I've searched and find like here

but it isn't php can anyone help me

  • 写回答

1条回答 默认 最新

  • dongyuyi5680 2017-04-23 13:43
    关注

    DISCLAIMER: I assumed the JS code from the linked answer works.

    Below is my attempt to convert the javascript code from here to PHP.

    function sqr($x) { return $x * $x; }
    function dist2($v, $w) { return sqr($v->x - $w->x) + sqr($v->y - $w->y); }
    function distToSegmentSquared($p, $v, $w) {
        $l2 = dist2($v, $w);
        if ($l2 == 0) return dist2($p, $v);
        $t = (($p->x - $v->x) * ($w->x - $v->x) + ($p->y - $v->y) * ($w->y - $v->y)) / $l2;
        $t = max(0, min(1, $t));
        return dist2($p, (object) array('x' => $v->x + $t * ($w->x - $v->x),
                        'y' => $v->y + $t * ($w->y - $v->y) ));
    }
    function distToSegment($p, $v, $w) { return sqrt(distToSegmentSquared($p, $v, $w)); }
    

    Use it like so:

    $p = (object) array('x' => 2, 'y' => 2);
    $v = (object) array('x' => 9, 'y' => 2);
    $w = (object) array('x' => 2, 'y' => 9);
    
    echo distToSegment($p, $v, $w);
    



    Comparing JS output with PHP output:

    TEST 1

    For

    x = {x:2, y:2}
    v = {x:9, y:2}
    w = {x:2, y:9}
    

    JS OUTPUT:

    4.949747468305833

    PHP OUTPUT:

    4.9497474683058


    TEST 2

    For

    x = {x:1, y:9}
    v = {x:4, y:4}
    w = {x:4, y:9}
    

    JS OUTPUT:

    3

    PHP OUTPUT:

    3


    TEST 3

    For

    x = {x:5, y:6}
    v = {x:2, y:9}
    w = {x:8, y:2}
    

    JS OUTPUT:

    0.32539568672798375

    PHP OUTPUT:

    0.32539568672798

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c