2015-11-20 3 views
1

В настоящее время я пытаюсь нарисовать линию угла на чертеже zend pdf. Постараюсь объяснить, насколько я знаю об этом. enter image description hereZend PDF Draw A Curved Line

код я до сих пор для линии и стрелки заключается в следующем:

$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); 

Ближайший к изогнутой линии с помощью функции draw draw: переменными xstart и ystart является угол поворота (внизу слева) $ leftRake point - это угловая линия, значение хранится в моей базе данных.

Для DrawCircle линии, угол старта в нижней строке (0) и угол конца в идеале должен выстраиваться к диагональной прямой линии (что он делает в изображении)

Моя проблема - я могу Кажется, что верхняя стрелка соответствует линии конца угла в круге круга ничьи ... Любые предложения?

ответ

2

Проблема с размещением стрелок, по-видимому, является тригонометрией, поскольку код выглядит широко. Так в настоящее время, когда у вас есть эта строка:

$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 
+0

Perfect - это работало! благодаря! – AisRuss