1

如果我有一些使用坐标数组定义的形状,例如

[[-30, -30], [-30, 30], [30, 30], [30, -30]]

和使用以下定义的边缘:

[[0,1],[0,3],[1,2],[2,3]]

做一个正方形。

如何以编程方式告诉形状在 javascript 中以 0->359 的角度在中心旋转?

*或者更好的是,有没有让我选择旋转中心的功能?

** 目前,我已经设法使用以下方法获得圆形画布的形状:

var x_rotate = Math.sin(angle * Math.PI /180);
var y_rotate = Math.cos(angle * Math.PI /180);

// for each coordinate
//add x_rotate and y_rotate if coordinate > 0 or subtract if coordinate < 0 
4

3 回答 3

7

给你,一点x, y一点地centerx, centery旋转点degrees。返回浮动值,如果需要,可以四舍五入。

要旋转形状,请旋转所有点。如果需要,请计算中心,这不会。

Desmos 与xas ayas bcenterxas pcenteryasqdegreesas链接s

function rotatePoint(x, y, centerx, centery, degrees) {
    var newx = (x - centerx) * Math.cos(degrees * Math.PI / 180) - (y - centery) * Math.sin(degrees * math.PI / 180) + centerx;
    var newy = (x - centerx) * Math.sin(degrees * Math.PI / 180) + (y - centery) * Math.cos(degrees * math.PI / 180) + centery;
    return [newx, newy];
}
于 2017-08-12T10:19:50.003 回答
3

您可以使用公式来围绕原点旋转点。

function rotate(array, angle) {
    return array.map(function (p) {
        function d2r(a) { return a * Math.PI / 180; }
        return [
            Math.cos(d2r(angle)) * p[0] - Math.sin(d2r(angle)) * p[1],
            Math.sin(d2r(angle)) * p[0] - Math.cos(d2r(angle)) * p[1],
        ];
    });
}
console.log(rotate([[-30, -30], [-30, 30], [30, 30], [30, -30]], 45));
console.log(rotate([[-30, -30], [-30, 30], [30, 30], [30, -30]], 90));
.as-console-wrapper { max-height: 100% !important; top: 0; }

于 2017-08-12T10:20:35.803 回答
-1

通过 javascript 使用 css 转换和更改转换

https://www.w3schools.com/cssref/css3_pr_transform.asp

https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Transitions/Using_CSS_transitions

于 2017-08-12T09:47:28.127 回答