Math 相对于图像坐标的点旋转

Math 相对于图像坐标的点旋转,math,tags,rotation,coordinates,Math,Tags,Rotation,Coordinates,我正在为我的本地照片创建一个带有web界面的数据库,在这里我希望能够标记图像并旋转它们,以及其他事情。在实现标签(就像Facebook的标签系统一样)时,我遇到了一个问题。即: 假设我已经标记了一个(不是)我的图像: 当我旋转它时,我希望标记坐标随图像旋转,如下所示: 这是我的问题。我将坐标存储在CSS坐标系的数据库(x,y)中,即左/上,而不是数学上的左/下。(这可能不是一个太大的问题?) 下一个大问题是,当我围绕中心(点[0,0])旋转时,我会得到负坐标。例如,从[100100]到[-1

我正在为我的本地照片创建一个带有web界面的数据库,在这里我希望能够标记图像并旋转它们,以及其他事情。在实现标签(就像Facebook的标签系统一样)时,我遇到了一个问题。即:

假设我已经标记了一个(不是)我的图像:

当我旋转它时,我希望标记坐标随图像旋转,如下所示:

这是我的问题。我将坐标存储在CSS坐标系的数据库(x,y)中,即左/上,而不是数学上的左/下。(这可能不是一个太大的问题?)

下一个大问题是,当我围绕中心(点[0,0])旋转时,我会得到负坐标。例如,从[100100]到[-100,-100]。这是不正确的,因为当我旋转图像时,我不会得到负坐标。坐标系仅为正

我所有的旋转代码都使用了矢量旋转公式:

$nx = $x * cos(deg2rad($rotation_angle)) - $y * sin(deg2rad($rotation_angle));
$ny = $x * sin(deg2rad($rotation_angle)) + $y * cos(deg2rad($rotation_angle));

我的问题是:我如何解决这个问题?我试着用abs将负值变成正值,但结果是坐标错误。

如果你的旋转只有90度,如图所示,那么答案相当简单。诀窍在于,你不是在一个固定的参考系内旋转坐标本身,你只是在改变测量它们的参考系。(好吧,这两者是等价的,但在我看来,这是一种更容易想象的方式。)

在原件中,从左边缘向右测量
x
,从上边缘向下测量
y
。旋转后,边的位置发生了变化,因此现在需要计算出同一点相对于新帧的位置。因此,新的
x
是从新的左边缘(以前是底部)向右的距离;新的
y
是从新的顶部边缘向下的距离,该顶部边缘过去是左侧。即:

$ny = $x;
$nx = $height - $y;
将其扩展到180度和270度旋转应该是相当明显的


如果您需要处理部分旋转,那么问题就有点复杂了,因为您必须定义与页面对齐的坐标轴,而不是与图像边缘对齐的坐标轴,并且您可以选择如何偏移它们。如果是这种情况,请发表评论,稍后我将尝试填写更多详细信息。

我只能旋转+90度或-90度,所以我只需检查这两种情况,还是根据180->270旋转和0->90旋转而有所不同?谢谢你的回复。@Erik你只需要检查一下这两个-如果你非常在意+90,你甚至可以用+90来构建一切,因为-90和+90+90是一样的。只要确保在将旋转链接在一起时,将它们应用于任何先前旋转的结果,而不是原始坐标-即,
$x=$nx$y=$ny