用二维变换矩阵表示一个矩形(rect)

来源:互联网 发布:1998年湖北数据 编辑:程序博客网 时间:2024/06/15 23:26

在2d处理图形的时候,矩形(rect)被用到的地方相当的多。
最主要的是用在图像位置的表示上。
rect由4个数表示:x, y, width,height 或 left, top, right, bottom。
但是,如果图像发生了旋转(例如30度),rect就无法表示图像的位置了,有一种可行的表示方案是用4个点表示(x1,y1),(x2,y2)(x3,y3),(x4,y4).

adobe pdf 提供了一种利用二维变换矩阵(M)表示rect的高效方法:
用一个固定的rect 和一个变换矩阵(M)来表示。
为了方便运算,固定的rect的位置为: x=0, y=0,wdith=1, height=1;
最终的rect被认为是经过M变换后得到的新区域。
最终的位置处理巧妙的转换成了对矩阵的处理。在记录的时候,rect是固定的,无需记录,只需记录矩阵(6个数)即可,因此记录一个旋转矩阵用此方法只需6个数即可。
下面是依据此法,计算旋转图像的4个顶点(传入的是一个表示图像位置的矩阵):

void MatGetRectVertex(const double *m_in, double *vertex_out){    // llx    vertex_out[0] = m_in[4];    // lly    vertex_out[1] = m_in[5];    // ulx    vertex_out[2] = m_in[4] + m_in[2];    // uly    vertex_out[3] = m_in[5] + m_in[3];    // urx    vertex_out[4] = m_in[4] + m_in[0] + m_in[2];    // ury    vertex_out[5] = m_in[5] + m_in[1] + m_in[3];    // lrx    vertex_out[6] = m_in[4] + m_in[0];    // lry    vertex_out[7] = m_in[5] + m_in[1];}
0 0
原创粉丝点击