从x、y、宽度、高度和旋转中获取旋转矩形的顶点

4
我有一个矩形,它被旋转了(在这种情况下旋转了45度),看起来像这样: My rectangle 我知道X坐标是矩形左上角的距离(如果矩形未旋转,则为图片顶部位置)。Y坐标也是从左上角开始计算。我知道矩形的宽度、高度和边界框。我想找出此矩形的其他点:左上角(在这种情况下是X位置)、右上角、右下角和左下角。我试图使用转换矩阵,但似乎无法理解。
如何找到此矩形的其他点?技术上我正在使用JavaScript,但任何语言都应该能够处理此问题。
2个回答

6

如果您正在寻找这方面的信息,以下是一个相关函数。

x,y,height和width如下图所示。 ang是x,y点与Y轴之间的夹角。 如果您想要x,y点与X轴之间的夹角,请在将其发送到函数之前执行以下操作: ang = 90 - ang isDeg只是指示您是否使用角度制或弧度制表示ang。

function getRectFourPoints(x,y, width, height, ang, isDeg = false) {
   
 if(isDeg) ang = ang * (Math.PI / 180)

 const points = {first: {x,y}}
 const sinAng = Math.sin(ang) 
 const cosAng = Math.cos(ang)
 
 let upDiff = sinAng * width
 let sideDiff = cosAng * width
 const sec = {x: x + sideDiff, y: y + upDiff}
 points.sec = sec
 
 upDiff = cosAng * height
 sideDiff = sinAng * height
 points.third = {x: x + sideDiff, y: y - upDiff}
 
 const fourth = {x: sec.x + sideDiff, y: sec.y - upDiff}
 points.fourth = fourth
 return points
}
example triangle


0

旋转矩阵可以帮助根据先前的位置计算当前位置。如果它是顺时针旋转,2D旋转矩阵如下:

enter image description here

这使得

enter image description here enter image description here


那么 x' 是原始的 x 还是 x 是原始的 x? - Johnston
@Johnston 之前的坐标为(x,y),新的坐标为(x',y')。请注意,这个公式是针对以坐标原点(0,0)为中心旋转的。 - MBo
@MBo 是正确的,(x', y') 是从 (x, y) 转换而来的新坐标。对于造成的困惑,我感到抱歉。 - Gracegotlost

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接