2个坐标之间的中心文本

时间:2011-02-09 21:56:34

标签: php math drawing

我试图将一行已知宽度的文本沿着指定为起点和终点坐标的行居中。

目的是在多边形周围编写文本,因此这些线并不总是水平的。

目前我有以下函数,它取一行的起始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;
}

如果有人能看到我的错误,或者为此目的知道算法,我将非常感谢您的意见。

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

我认为这应该有效:

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

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

$x1 += $k*$gradient;
$y1 -= $k; 
return;

当你在这里时,我认为

中的abs
$x1 += abs($x2-$x1) / $factor;
如果($x2-$x1)为负数,可能会导致意外结果(可能最好不要使用abs),并且根据php如何处理无穷大,您可能希望制定案例计划$factor === 0