Zend PDF:计算旋转后的坐标

Posted

技术标签:

【中文标题】Zend PDF:计算旋转后的坐标【英文标题】:Zend PDF: calculating coordinates after rotation 【发布时间】:2016-01-07 16:06:35 【问题描述】:

没有涉及太多细节 - 我从网络工具获取参数 (x1,x2,y1,y2,a,b,α),我需要使用包含绿色的 Zend_PDF 库生成 PDF 文档图像在精确坐标上正确旋转和定位。

现在,让我感到困惑的是 Zend 不允许旋转元素,而是旋转纸张。所以,我认为轮换需要像这样完成

$page->rotate($x1 + ($x2 - $x1) / 2, $y1 + ($y2 - $y1) / 2, - deg2rad($rotation));

因为我们希望图像的中心作为旋转点,并且我们将其反向旋转,这样生成的图像才会得到正确的旋转。

我遇到麻烦的棘手部分是绘制它。通过简单的调用

$page->drawImage($image, $x1, $y1, $x2, $y2);

我得到了图表上显示的结果 - 结果图像也需要翻译,因为 (x1,y1) 和 (x2,y2) 不再是精确坐标,但我不确定如何计算它们?有什么想法吗?

【问题讨论】:

是 (x1, y1) 和 (x2, y2) 坐标在您的rotatedrawImage 通话中是否相同?还是您的图像只是绿色矩形,在这种情况下drawImage 的值应该完全不同... 是的,它们是一样的。 $image 是一个绿色矩形,这也是正确的。我意识到 drawImage 调用得到了错误的坐标,但我不确定如何计算正确的坐标。 【参考方案1】:

OP 在评论中确认他对 (x1,y1) 和 (X2,y2 使用了相同的值)在他的rotate 和他的drawImage 电话中。不过,从他的草图中可以很明显地看出,后者调用的坐标必须不同。

幸运的是,我们从绿色矩形的内接方式知道从 (x1,y1) 到 (X2,y2),它与该矩形具有相同的中心点。此外,我们还有绿色矩形的尺寸 ab

因此,drawImage 参数必须更改为:

$page->drawImage($image, $x1 + ($x2 - $x1) / 2 - $a / 2
                       , $y1 + ($y2 - $y1) / 2 - $b / 2
                       , $x1 + ($x2 - $x1) / 2 + $a / 2
                       , $y1 + ($y2 - $y1) / 2 + $b / 2);

【讨论】:

伙伴,感谢您的回复!解决方案几乎是完美的 - X 坐标是完美的,但 Y 仍需要向下平移一点(在常规未旋转坐标系中)。您可能知道为什么以及如何翻译它吗?简单地改变 drawImage 中的 y1 和 y2 会扭曲生成的图像,因为旋转系统中的 Y 轴是原始系统中 X 和 Y 的平移。 您能否分享输入值和生成的 PDF 以供分析 Y 仍需要稍微翻译进行分析? 据说...@Relja 只需更改 drawImage 中的 y1 和 y2 就会使结果图像倾斜 - 更改旋转和 drawImage 的 y 值。跨度> @Relja 现在可以按预期工作还是您还需要帮助?

以上是关于Zend PDF:计算旋转后的坐标的主要内容,如果未能解决你的问题,请参考以下文章

数学问题-圆上某点沿圆心旋转后的坐标关系式

数学问题-圆上某点沿圆心旋转后的坐标关系式

c++语言 空间中N个点随坐标系旋转后的坐标

想问一个关于数学旋转的问题,就是在直角坐标系中,某个点绕原点旋转某个度数,应该怎么求出旋转后的度数

图像旋转的原理

图像旋转算法与实现