центральный текст между двумя координатами - PullRequest
1 голос
/ 10 февраля 2011

Я пытаюсь центрировать строку текста известной ширины вдоль линии, указанной в качестве начальной и конечной координат.

Цель состоит в том, чтобы написать текст вокруг многоугольника, чтобы линии не всегда были горизонтальными.

В настоящее время у меня есть следующая функция, которая берет начало 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 голосов
/ 10 февраля 2011

Я думаю, что это должно сработать:

$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.

...