二维数组旋转的坐标变换,可以绕任意点旋转。
网上资料有一个变换矩阵,但我想要一个坐标转换的公式,数学功底不扎实,特来求教大神。double radian = (Math.PI / 180) * angle;
double cos = Math.cos(radian);
double sin = Math.sin(radian);
tx、ty为旋转围绕点坐标
double nx = x * cos - y * sin + ((1 - cos) * tx + ty * sin);
double ny = x * sin + y * cos + ((1 - cos) * ty - tx * sin);
按照网上资料组合的,但只能计算一维、二维长度相同、且只能绕(0, 0)点或中心点旋转0度或90度的倍数。其它情况nx、ny都有负数的情形,理论上是不应该出现负数的。
收藏 (0)
分享
微博QQ微信
举报
加载中
那个公式没看懂,刚自己推了下给你参考下
中点为cx,cy,旋转弧度为radian
dx = x-cx
dy = y-cy
r = sqrt(dx*dx+dy*dy)
radian1 = atan(dy/dx) + radian
nx = cos(radian1) * r + cx
ny = sin(radian1) * r + cy
其实这个平常都是用矩阵去做,好久没去自己推计算方式了
回复@BoXuan : 你的公式没问题,我只是之前没看懂,发了链接后看懂了
回复 举报
https://blog.csdn.net/csxiaoshui/article/details/65446125 我是按照这篇博客中的改过来的,请问我的公式有什么问题呢?
回复 举报
谢谢!
回复 举报
1 0 -tx cos -sin 0 cos -sin (-txcos - tysin) 1 0 tx cos -sin (-txcos - tysin + tx) 0 1 -ty x sin cos 0 => sin cos (-txsin - tycos) x 0 1 ty => sin cos (-txsin - tyco