已知矩形四个顶点的坐标,矩形旋转一定角度后,求矩形的四个顶点的新坐标?

OneCoderr 2017-09-14 11:40:20
已知矩形四个顶点的坐标,矩形旋转一定角度后,求矩形的四个顶点的新坐标? 为了计算简单,此处暂定是以矩形中心点旋转。

我可以分四个象限计算(顺时针和逆时针可以用角度变化来判断),但还是太麻烦了,请教大神有没简单的方法?

不要说教,只要方法,最好有实例。
...全文
3206 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2018-10-26
  • 打赏
  • 举报
回复
平面直角坐标系中的三角函数的角度都是逆时针计算的
之所以要强调一下,是因为屏幕坐标系的 y轴朝下,对应的角度就是顺时针方向的
OneCoderr 2018-10-26
  • 打赏
  • 举报
回复
引用 4 楼 xuzuning 的回复:
假设对图片上任意点(x,y),绕一个坐标点(rx0,ry0)逆时针旋转a角度后的新的坐标设为(x0, y0),有公式:
x0= (x - rx0)*cos(a) - (y - ry0)*sin(a) + rx0 ;
y0= (x - rx0)*sin(a) + (y - ry0)*cos(a) + ry0 ;

公式的推导见 http://jingyan.baidu.com/article/2c8c281dfbf3dd0009252a7b.html


事实上,这个公司顺时针、逆时针都适用。 网上推导出来的顺时针公式仔细分析一下是和这个一致的。
xuzuning 2017-09-14
  • 打赏
  • 举报
回复
假设对图片上任意点(x,y),绕一个坐标点(rx0,ry0)逆时针旋转a角度后的新的坐标设为(x0, y0),有公式: x0= (x - rx0)*cos(a) - (y - ry0)*sin(a) + rx0 ; y0= (x - rx0)*sin(a) + (y - ry0)*cos(a) + ry0 ; 公式的推导见 http://jingyan.baidu.com/article/2c8c281dfbf3dd0009252a7b.html
白衣如花 2017-09-14
  • 打赏
  • 举报
回复
突然发现sb了 用和角余弦算x 和角正弦算y就好了嘛。。。。
白衣如花 2017-09-14
  • 打赏
  • 举报
回复
第一个式子错了x2^2 + y2^2 = (L/2)^2 = x1^2 + y1^2
白衣如花 2017-09-14
  • 打赏
  • 举报
回复
不知道你是否记得两向量夹角公式? cos = ab/|a||b| 设对角线长度为L,则以矩形中心点为出发点,顶点为终点的向量长度为 L/2 则有 x2^2 + y2^2 = L/2 = x1^2 + y1^2 cos = (x1 * x2 + y1 * y2) / (L/ 2 * L/2) 解二元二次方程 或者你不用向量夹角公式,用和角余弦公式 cos(a + b) = cos(a)cos(b) - sin(a)sin(b) = x2 / (L/2) // a是一开始的角度,b是旋转的角度 再和长度等式并联,解二元二次方程组
第三章作业 1. (6分)名词解释:扫描转换、增量算法、反走样。 扫描转换:基本图形的光栅化就是在像素点阵中确定最佳逼近与理想图形的像素点集, 并用指定颜色显示这些像素点集的过程。当光栅化与按扫描线顺序绘制图形的过程集合 在一起时,也称为扫描转移。 增量算法:在一个迭代算法中,如果每一步X,Y值是用前一步的值加上一个增量来获得 的,那么,这个算法就称为增量算法。 反走样:用于减轻走样的技术称为反走样或者称为抗锯齿。 2. (10分)计算起点坐标为(0,0),终点坐标(12,9)直线的中点Bresenham算法的每一 步坐标值以及中点偏差判别式d的值,填入表3-1中,并用黑色绘制图3- 29中的直线段的扫描转换像素。 图3-29 像素点阵 "x "y "d "x "y "d " "0 "0 "-0.25 "7 "5 "-0.5 " "1 "1 "0 "8 "6 "-0.25 " "2 "1 "-0.75 "9 "6 "0 " "3 "2 "-0.5 "10 "7 "-0.75 " "4 "3 "-0.25 "11 "8 "-0.5 " "5 "3 "0 "12 "9 "-0.25 " "6 "4 "-0.75 " " " " 表3-1 x,y和d的值 第四章作业 1. (10分)名词解释:四邻接点、八邻接点、四连通域、八连通域、种子填充算法。 四邻接点:对于多边形区域内部任意一个种子像素,其上、下、左、右这四个像素,称 为四邻接点。 八邻接点:对于多边形区域内部任意一个种子像素,其上、下、左、右以及左上、左下 、右上、右下这八个像素,称为八邻接点。 四连通域:对于多边形区域内部任意一个种子子素出发,通过访问其上、下、左、右这 四个邻接点可以遍历区域内部的所有像素,该多边形区域称为四连通域。 八连通域:对于多边形区域内部任意一个种子子素出发,通过访问其上、下、左、右以 及左上、左下、右上、右下这八个邻接点可以遍历区域内部的所有像素,该多边形区域 称为八连通域。 种子填充算法:从区域内任意一个种子像素开始,由内向外将填充色扩散到整个多边形 区域的填充过程。 2. (10分)试写出图4-43所示多边形的边表和扫描线y=4的有效边表。 图4-43 多边形 解:ET表 Y=4时的AET表 3. (10分)图中已知种子O,试根据简单四连通种子填充算法按左、上、右、下入栈的顺 序给出象素点填充的次序。 " " " " " " " " "3 "O "4 "5 " " " "2 "1 " "6 " " " " " " " " " 第五章作业 1. (10分)名词解释:坐标变换、WCS、UCS、窗口、视区、窗视变换、裁剪、 坐标变更:是坐标系发生变换,但物体位置不发生改变,然后在坐标系下表示所有物 体上的顶点。 WCS:(word coordinate system)世界坐标系,描述现实世界中场景的固定坐标系。 UCS:(user coordinate system)用户坐标系,描述物体几何模型的坐标系。有时也称为局域坐标系(local coordinate system,LCS)。用户坐标系也是实数域坐标系、 窗口:在观察坐标系中定义的确定显示内容的矩形区域称为窗口。 视区:在屏幕坐标系中定义的输出图形的矩形区域称为视区。 窗视变换:图形输出需要进行窗口到视区的变换,只有在窗口内的图形才能在视区中输 出,并且输出的形状要根据视区的大小进行调整,这称为窗视变换。 裁剪:在二维观察中,需要在观察坐标系下根据窗口大小对世界坐标系中的二维图形进 行裁剪,只将位于窗口内的图形变换到视区输出。 2. (10分)如图5- 51所示,P0(4,1)、P1(7,3)、P2(7,7)、P3(1,4)构成的四边形绕 Q(5,4)逆时针旋转45°的变换矩阵和变换后图形的顶点坐标。 图5-51 四边形旋转 解:变换的过程包括: 1. 平移:将P点平移至原点,变换矩形为: 2. 旋转:图形绕原点(P点)旋转45度,变换矩形为: 3. 反平移:将P点移回原处,变换矩阵为: 变换矩阵为: 变换过程为: 3. (14分)用编码裁剪算法裁剪线段P0(0,2),P1(3,3),裁剪窗口为wxl=1,wxr=6,wy b=1,wyt=5,如图5-54所示。要写出: (1)窗口边界划分的9个区间的编码原则。 (2)线段端点的编码。 (3)裁剪的主要步骤。 (4)裁剪后窗口内直线段的端点坐标。 图5-54 直线段裁剪 解:1)首先对直线段的端点进行编码,即对直线段的任一端点(x,y),根据其坐标所 在的区域,赋予一个四位的二进制码D3D2D1D0 若xwxr,则D1=1,否则D1=0; 若ywyt
第三章作业 1. (6分)名词解释:扫描转换、增量算法、反走样。 扫描转换:基本图形的光栅化就是在像素点阵中确定最佳逼近与理想图形的像素点集, 并用指定颜色显示这些像素点集的过程。当光栅化与按扫描线顺序绘制图形的过程集合 在一起时,也称为扫描转移。 增量算法:在一个迭代算法中,如果每一步R,R值是用前一步的值加上一个增量来获得 的,那么,这个算法就称为增量算法。 反走样:用于减轻走样的技术称为反走样或者称为抗锯齿。 2. (10分)计算起点坐标为(0,0),终点坐标(12,9)直线的中点Bresenham算法的每一 步坐标值以及中点偏差判别式d的值,填入表3-1中,并用黑色绘制图3- 29中的直线段的扫描转换像素。 图3-29像素点阵 "R "R "d "R "R "d " "0 "0 "-0.25 "7 "5 "-0.5 " "1 "1 "0 "8 "6 "-0.25 " "2 "1 "-0.75 "9 "6 "0 " "3 "2 "-0.5 "10 "7 "-0.75 " "4 "3 "-0.25 "11 "8 "-0.5 " "5 "3 "0 "12 "9 "-0.25 " "6 "4 "-0.75 " " " " 表3-1R,R和d的值 第四章作业 1. (10分)名词解释:四邻接点、八邻接点、四连通域、八连通域、种子填充算法。 四邻接点:对于多边形区域内部任意一个种子像素,其上、下、左、右这四个像素,称 为四邻接点。 八邻接点:对于多边形区域内部任意一个种子像素,其上、下、左、右以及左上、左下 、右上、右下这八个像素,称为八邻接点。 四连通域:对于多边形区域内部任意一个种子子素出发,通过访问其上、下、左、右这 四个邻接点可以遍历区域内部的所有像素,该多边形区域称为四连通域。 八连通域:对于多边形区域内部任意一个种子子素出发,通过访问其上、下、左、右以 及左上、左下、右上、右下这八个邻接点可以遍历区域内部的所有像素,该多边形区域 称为八连通域。 种子填充算法:从区域内任意一个种子像素开始,由内向外将填充色扩散到整个多边形 区域的填充过程。 2. (10分)试写出图4-43所示多边形的边表和扫描线R=4的有效边表。 图4-43多边形 解:ET表 R=4时的AET表 3. (10分)图中已知种子O,试根据简单四连通种子填充算法按左、上、右、下入栈的顺 序给出象素点填充的次序。 " " " " " " " " "3 "O "4 "5 " " " "2 "1 " "6 " " " " " " " " " 第五章作业 1. (10分)名词解释:坐标变换、WCS、UCS、窗口、视区、窗视变换、裁剪、 坐标变更:是坐标系发生变换,但物体位置不发生改变,然后在坐标系下表示所有物 体上的顶点。 WCS:(wordcoordinatesRstem)世界坐标系,描述现实世界中场景的固定坐标系。 UCS:(usercoordinatesRstem)用户坐标系,描述物体几何模型的坐标系。有时也称为 局域坐标系(localcoordinatesRstem,LCS)。用户坐标系也是实数域坐标系、 窗口:在观察坐标系中定义的确定显示内容的矩形区域称为窗口。 视区:在屏幕坐标系中定义的输出图形的矩形区域称为视区。 窗视变换:图形输出需要进行窗口到视区的变换,只有在窗口内的图形才能在视区中输 出,并且输出的形状要根据视区的大小进行调整,这称为窗视变换。 裁剪:在二维观察中,需要在观察坐标系下根据窗口大小对世界坐标系中的二维图形进 行裁剪,只将位于窗口内的图形变换到视区输出。 2. (10分)如图5- 51所示,P0(4,1)、P1(7,3)、P2(7,7)、P3(1,4)构成的四边形绕Q(5,4)逆时 针旋转45°的变换矩阵和变换后图形的顶点坐标。 图5-51四边形旋转 解:变换的过程包括: 1. 平移:将P点平移至原点,变换矩形为: 2. 旋转:图形绕原点(P点)旋转45度,变换矩形为: 3. 反平移:将P点移回原处,变换矩阵为: 变换矩阵为: 变换过程为: 3. (14分)用编码裁剪算法裁剪线段P0(0,2),P1(3,3),裁剪窗口为wRl=1,wRr=6,wR b=1,wRt=5,如图5-54所示。要写出: (1)窗口边界划分的9个区间的编码原则。 (2)线段端点的编码。 (3)裁剪的主要步骤。 (4)裁剪后窗口内直线段的端点坐标。 图5-54直线段裁剪 解:1)首先对直线段的端点进行编码,即对直线段的任一端点(R,R),根据其坐标所 在的区域,赋予一个四位的二进制码D3D2D1D0 若RwRr,则D1=1,否则D1=0; 若RwRt,则D3=1,否则D
第三章作业 1. (6分)名词解释:扫描转换、增量算法、反走样。 扫描转换:基本图形的光栅化就是在像素点阵中确定最佳逼近和理想图形的像素点集, 并用指定颜色显示这些像素点集的过程。当光栅化和按扫描线顺序绘制图形的过程集合 在一起时,也称为扫描转移。 增量算法:在一个迭代算法中,如果每一步X,Y值是用前一步的值加上一个增量来获得 的,那么,这个算法就称为增量算法。 反走样:用于减轻走样的技术称为反走样或者称为抗锯齿。 2. (10分)计算起点坐标为(0,0),终点坐标(12,9)直线的中点算法的每一步坐标值 以及中点偏差判别式d的值,填入表3-1中,并用黑色绘制图3- 29中的直线段的扫描转换像素。 图3-29 像素点阵 "x "y "d "x "y "d " "0 "0 "-0.25 "7 "5 "-0.5 " "1 "1 "0 "8 "6 "-0.25 " "2 "1 "-0.75 "9 "6 "0 " "3 "2 "-0.5 "10 "7 "-0.75 " "4 "3 "-0.25 "11 "8 "-0.5 " "5 "3 "0 "12 "9 "-0.25 " "6 "4 "-0.75 " " " " 表3-1 和d的值 第四章作业 1. (10分)名词解释:四邻接点、八邻接点、四连通域、八连通域、种子填充算法。 四邻接点:对于多边形区域内部任意一个种子像素,其上、下、左、右这四个像素,称 为四邻接点。 八邻接点:对于多边形区域内部任意一个种子像素,其上、下、左、右以及左上、左下 、右上、右下这八个像素,称为八邻接点。 四连通域:对于多边形区域内部任意一个种子子素出发,通过访问其上、下、左、右这 四个邻接点可以遍历区域内部的所有像素,该多边形区域称为四连通域。 八连通域:对于多边形区域内部任意一个种子子素出发,通过访问其上、下、左、右以 及左上、左下、右上、右下这八个邻接点可以遍历区域内部的所有像素,该多边形区域 称为八连通域。 种子填充算法:从区域内任意一个种子像素开始,由内向外将填充色扩散到整个多边形 区域的填充过程。 2. (10分)试写出图4-43所示多边形的边表和扫描线y=4的有效边表。 图4-43 多边形 解:表 4时的表 3. (10分)图中已知种子O,试根据简单四连通种子填充算法按左、上、右、下入栈的顺 序给出象素点填充的次序。 " " " " " " " " "3 "O "4 "5 " " " "2 "1 " "6 " " " " " " " " " 第五章作业 1. (10分)名词解释:坐标变换、、、窗口、视区、窗视变换、裁剪、 坐标变更:是坐标系发生变换,但物体位置不发生改变,然后在坐标系下表示所有物 体上的顶点。 :( )世界坐标系,描述现实世界中场景的固定坐标系。 :( )用户坐标系,描述物体几何模型的坐标系。有时也称为局域坐标系( ,)。用户坐标系也是实数域坐标系、 窗口:在观察坐标系中定义的确定显示内容的矩形区域称为窗口。 视区:在屏幕坐标系中定义的输出图形的矩形区域称为视区。 窗视变换:图形输出需要进行窗口到视区的变换,只有在窗口内的图形才能在视区中输 出,并且输出的形状要根据视区的大小进行调整,这称为窗视变换。 裁剪:在二维观察中,需要在观察坐标系下根据窗口大小对世界坐标系中的二维图形进 行裁剪,只将位于窗口内的图形变换到视区输出。 2. (10分)如图5- 51所示,P0(4,1)、P1(7,3)、P2(7,7)、P3(1,4)构成的四边形绕 Q(5,4)逆时针旋转45°的变换矩阵和变换后图形的顶点坐标。 图5-51 四边形旋转 解:变换的过程包括: 1. 平移:将P点平移至原点,变换矩形为: 2. 旋转:图形绕原点(P点)旋转45度,变换矩形为: 3. 反平移:将P点移回原处,变换矩阵为: 变换矩阵为: 变换过程为: 3. (14分)用编码裁剪算法裁剪线段P0(0,2),P1(3,3),裁剪窗口为1,6,1,5,如图5 -54所示。要写出: (1)窗口边界划分的9个区间的编码原则。 (2)线段端点的编码。 (3)裁剪的主要步骤。 (4)裁剪后窗口内直线段的端点坐标。 图5-54 直线段裁剪 解:1)首先对直线段的端点进行编码,即对直线段的任一端点(x,y),根据其坐标所 在的区域,赋予一个四位的二进制码D3D2D1D0 若x<,则D0=1,否则D0=0; 若x>,则D1=1,否则D1=0; 若y<,则D2=1,否则D2=0; 若y>,则D3=1,否则D3=0. 2)线段端点的编码:1=0001 2=0000 3)裁剪的主要步骤: (1)输入直线的两端点坐标:P0(0,2),P1(3,3),以及窗口的四边界坐标:1,6, 1,5 (2)对p0,p1进行编码:点p0的编码为1=000

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧