gpt4 book ai didi

javascript - 围绕原点旋转点

转载 作者:行者123 更新时间:2023-11-30 15:47:04 25 4
gpt4 key购买 nike

我正在尝试围绕原点旋转 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
);
}

这给了我这个结果:

注意:蓝色十字为原点,绿色矩形框出点

Collider not rotated

当我尝试旋转矩形时,如下所示:

// 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
);
}

我得到的结果是矩形现在位于左下角。

Collider Rotated

我不确定我需要做什么才能使点围绕原点旋转。

最佳答案

我会尝试使用

(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] 和结果添加一些实际值可能会有所帮助。

关于javascript - 围绕原点旋转点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39910713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com