You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JavaScript实现屏幕坐标系下点绕原点旋转90/180/270度的函数

实现屏幕坐标系中点绕原点旋转的JavaScript函数

需要实现一个函数,接收屏幕坐标系中的点坐标、旋转原点坐标和旋转角度(支持顺时针90/180/270度),返回旋转后的新坐标。

屏幕坐标系的y轴正方向向下,和数学笛卡尔坐标系相反,因此旋转逻辑需要对应调整。针对90/180/270这类整倍数角度,我们可以不用三角函数,直接通过坐标交换和符号反转实现高效计算。

针对90/180/270度的优化实现

function rotatePoint(x, y, originX, originY, angle) {
    // 计算点相对于旋转原点的坐标
    const relX = x - originX;
    const relY = y - originY;
    let newRelX, newRelY;

    // 根据顺时针角度处理坐标变换(适配屏幕y轴向下特性)
    switch (angle % 360) {
        case 0:
            newRelX = relX;
            newRelY = relY;
            break;
        case 90:
            // 顺时针90度:相对坐标从(relX, relY)转为(-relY, relX)
            newRelX = -relY;
            newRelY = relX;
            break;
        case 180:
            // 顺时针180度:相对坐标取反
            newRelX = -relX;
            newRelY = -relY;
            break;
        case 270:
            // 顺时针270度:相对坐标从(relX, relY)转为(relY, -relX)
            newRelX = relY;
            newRelY = -relX;
            break;
        default:
            // 非指定角度返回原坐标
            return { x, y };
    }

    // 转换回原坐标系
    return {
        x: newRelX + originX,
        y: newRelY + originY
    };
}

测试示例

验证用户给出的场景:点(1,0)绕原点(1,2)顺时针旋转90度

const result = rotatePoint(1, 0, 1, 2, 90);
console.log(result); // 输出 { x: 3, y: 2 },符合预期

支持任意角度的通用实现

如果需要支持任意角度的顺时针旋转,可使用三角函数计算,同时处理屏幕坐标系的特性:

function rotatePoint(x, y, originX, originY, angle) {
    // 将角度转为弧度,顺时针旋转需取负角度
    const rad = -angle * Math.PI / 180;
    const cos = Math.cos(rad);
    const sin = Math.sin(rad);

    // 计算相对坐标
    const relX = x - originX;
    const relY = y - originY;

    // 应用旋转公式
    const newRelX = relX * cos - relY * sin;
    const newRelY = relX * sin + relY * cos;

    // 处理浮点数精度,转换回原坐标系
    return {
        x: Math.round(newRelX + originX),
        y: Math.round(newRelY + originY)
    };
}

内容的提问来源于stack exchange,提问作者jansma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 20:01:17