【发布时间】:2021-01-03 19:55:21
【问题描述】:
给定旋转图像的theta 弧度角、width 和height,如何计算包含旋转图像的外部矩形的新宽度和高度?
换句话说,我如何计算新的绑定框宽度/高度? 请注意,图像实际上可能是圆形的,并且边缘有透明像素。
那就是:x1,y1。
我实际上正在使用cairo_rotate() 旋转一个以原点为中心的pixbuf,我需要知道新分配的区域。我尝试的是这样的:
double geo_rotated_rectangle_get_width (double a, double b, double theta)
{
return abs(a*cos(theta)) + abs(b*sin(theta));
}
它总是返回足够的空间来容纳旋转的图像,但是当图像没有以 90o 的倍数旋转并且是完全不透明的图像(a方)。
有趣的是,我刚刚尝试使用相同大小的完全不透明图像,结果没问题。我使用gdk_pixbuf_get_width() 来获取宽度,无论如何它都会返回相同的值。所以我假设公式是正确的,问题是没有考虑透明度。当以对角线方向旋转时,旋转图像的矩形边缘是透明的。
我将保留以上内容,以便对其他人有所帮助:) 现在问题变成了如何计算边缘上的透明像素
【问题讨论】:
-
You need to compute the new locations of the four corners。然后找到 x 和 y 的最小值和最大值。
-
我几何真的没那么好,哈哈
标签: c geometry rotation rectangles cairo