我试图围绕原点旋转4点。当我不旋转点时,它们会显示在正确的位置。我是这样做的:
let origin = this.transform.position;
for (let i in this._pointsOrig) {
let point = this._pointsOrig[i];
this._points[i] = new Vector2(
point.x + origin.x,
point.y + origin.y
);
}
这给了我这个结果:
注意:蓝色十字是原点,绿色矩形勾勒出点
当我尝试旋转矩形时,如下所示:
// degrees is between 0 & 360, so convert to radians
let rotation = this.transform.rotation.degrees * (Math.PI / 180);
let cos = Math.cos(rotation);
let sin = Math.sin(rotation);
let origin = this.transform.position;
for (let i in this._pointsOrig) {
let point = this._pointsOrig[i];
this._points[i] = new Vector2(
(cos * (point.x - origin.x)) + (sin * (point.y - origin.y)) + origin.x,
(cos * (point.y - origin.y)) - (sin * (point.x - origin.x)) + origin.y
);
}
我得到这个结果,矩形现在在左下角。
我不确定我需要做什么,所以这些点围绕原点旋转。
答案 0 :(得分:2)
我会尝试使用
(cos * point.x) + (sin * point.y) + origin.x,
(cos * point.y) - (sin * point.x) + origin.y
看起来像point.x和point.y是转移之前的值(origin.x,origin.y)。因此,在旋转之前移动坐标具有不期望的效果。
您可能会发现旋转方向错误
(cos * point.x) - (sin * point.y) + origin.x,
(cos * point.y) + (sin * point.x) + origin.y
如此改变的迹象可行。
如果旋转总是90°我们知道比cos(90°)= 0,sin(90°)= 1所以它简化为
this.points[i] = new Vector2(
- point.y + origin.x,
point.x + origin.y );
如果问题仍然存在,可能有助于为origin
,_pointsOrig[i]
和结果添加一些实际值。
答案 1 :(得分:0)
您必须在旋转前移动_pointsOrig,使它们以坐标原点为中心。
然后旋转,然后按原点移动
point.x = point.x - left + width / 2
point.y = point.y - top + height / 2
this._points[i] = new Vector2(
(cos * point.x + sin * point.y) + origin.x,
(cos * point.y - sin * point.x) + origin.y