Php 将文本居中放置在两个坐标之间

Php 将文本居中放置在两个坐标之间,php,math,drawing,Php,Math,Drawing,我试图将一行已知宽度的文本放在指定为起点和终点坐标的直线的中心 其目的是围绕多边形书写文本,因此线条并不总是水平的 目前,我有下面的函数,它获取一行的开始x和y,结束x和y,以及文本的宽度(以像素为单位) 文本将从x1、y1开始,以正确的角度沿着直线绘制 为了使文本居中,我尝试计算像素的左填充,应将其应用于x1,y1,以将文本从其左原点移动正确的量 以下函数是我试图修改坐标以实现上述概念的尝试。但这并不完全正确。我最后的文字稍微有点脱线,有时x在外面,有时y在外面,这取决于脸,但x或y都不正确

我试图将一行已知宽度的文本放在指定为起点和终点坐标的直线的中心

其目的是围绕多边形书写文本,因此线条并不总是水平的

目前,我有下面的函数,它获取一行的开始x和y,结束x和y,以及文本的宽度(以像素为单位)

文本将从x1、y1开始,以正确的角度沿着直线绘制

为了使文本居中,我尝试计算像素的左填充,应将其应用于x1,y1,以将文本从其左原点移动正确的量

以下函数是我试图修改坐标以实现上述概念的尝试。但这并不完全正确。我最后的文字稍微有点脱线,有时x在外面,有时y在外面,这取决于脸,但x或y都不正确

    private function CenterTextOnLine(&$x1, &$y1, &$x2, &$y2, $width)
{        
    $distance = $this->getDistance($x1, $y1, $x2, $y2);
    //calculate the left padding required in pixels
    $padding = ($distance - $width) / 2;
    //what factor do we need to alter x1, y1 by?
    $factor = ($distance / $padding);
    $gradient = ($y2-$y1)/($x2-$x1);  //gradient to alter y by

    $x1 += abs($x2-$x1) / $factor; //move start x by factor
    $y1 += ($gradient / $factor); //add factor of gradient to start y
    return;
}
如果有人能看到我的错误,或者知道用于此目的的算法,我将非常感谢您的输入


谢谢您的时间。

我认为这应该可以:

$y1 += ($y2-$y1)/$factor;

$k = $how_much_distance_I_want/sqrt(1+$gradient*$gradient);

$x1 += $k*$gradient;
$y1 -= $k; 
return;
当你这么做的时候,我觉得腹肌


如果$x2-$x1为负值,可能会导致意外的结果。如果没有abs,可能会更好,并且取决于php处理无穷大的方式,您可能需要为$factor==0的情况制定一个计划。

谢谢toochin,您让我想到了这一点。最终的解决方案要求我稍微改变一下我的方法。我觉得我把事情复杂化了。方法的主体最终看起来是这样的:“$padding=$distance-$width/2$dirx=cos deg2rad$角度$diry=sin deg2rad$角度$x1+=$dirx*$padding$y1+=$diry*$padding;'
$x1 += abs($x2-$x1) / $factor;