В настоящее время я пытаюсь нарисовать угловую линию на чертеже Zend PDF. Постараюсь объяснить столько, сколько я знаю об этом.
Код для линии и стрелок следующий:
$this->drawArrow($pdf, $xStart + 58.5, $yStart,1, 270); //bottom left arrow
$this->drawArrow($pdf, $xStart + $leftRake, $yStart + ($leftRake/ tan(deg2rad(abs($leftRake)))) ,1, 157); //top left arrow
$pdf->drawCircle($xStart, $yStart, 58.5, 0, deg2rad(90 - abs($leftRake)), $fillType); //left angle line
Стрелка рисования — это функция, которую я создал:
@param object $pdf The page to draw on
* @param integer $x Page coordinate for arrow
* @param integer $y Page coordinate for arrow
* @param float $scale Default size 1
* @param integer $angle Arrow angle 90 = up, 180 = right, 270 = down etc
*
* @return $pdf Page returned with arrow
*
*/
drawArrow($pdf, $x, $y, $scale = 1, $angle)
This is the function for drawCircle:
6. * Method signatures:
7. * drawCircle($x, $y, $radius);
8. * drawCircle($x, $y, $radius, $fillType);
9. * drawCircle($x, $y, $radius, $startAngle, $endAngle);
10. * drawCircle($x, $y, $radius, $startAngle, $endAngle, $fillType);
11. *
12. *
13. * It's not a really circle, because PDF supports only cubic Bezier
14. * curves. But very good approximation.
15. * It differs from a real circle on a maximum 0.00026 radiuses (at PI/8,
16. * 3*PI/8, 5*PI/8, 7*PI/8, 9*PI/8, 11*PI/8, 13*PI/8 and 15*PI/8 angles).
17. * At 0, PI/4, PI/2, 3*PI/4, PI, 5*PI/4, 3*PI/2 and 7*PI/4 it's exactly
18. * a tangent to a circle.
19. *
20. * @param float $x
21. * @param float $y
22. * @param float $radius
23. * @param mixed $param4
24. * @param mixed $param5
25. * @param mixed $param6
26. * @return Zend_Pdf_Page
27. */
28. public function drawCircle($x,
29. $y,
30. $radius,
31. $param4 = null,
32. $param5 = null,
33. $param6 = null);
Ближайшая к изогнутой линии — функция рисования круга:
Переменные xstart и ystart — это угол (слева внизу)
Точка $ leftRake — это угловая линия, значение хранится в моей базе данных.
Для линии drawCircle начальный угол — это нижняя линия (0), а конечный угол в идеале должен соответствовать прямой диагональной прямой (что и происходит на изображении).
Моя проблема в том, что я не могу получить верхнюю стрелку, совпадающую с линией конечного угла в бите круга прорисовки … Есть предложения?
Кажется, проблема размещения стрелок заключается в тригонометрии, поскольку код выглядит в целом нормально. Итак, где у вас есть эта строка:
$this->drawArrow($pdf, $xStart + $leftRake, $yStart
+ ($leftRake / tan(deg2rad(abs($leftRake)))) ,1, 157); //top left arrow
Следует читать:
$this->drawArrow($pdf, $xStart + (58.5 * cos(deg2rad(abs(90 - $leftRake)))), $yStart
+ (58.5 * sin(deg2rad(abs(90 - $leftRake)))) ,1, 157); //top left arrow
Других решений пока нет …