js屏幕坐标转换

/**
 * 原点坐标
 * @property {number} x
 * @property {number} y
 */
export interface OriginPoint{
    x: number;
    y: number;
}

/**
 *  已知某一点坐标,旋转角度,长度,求另一点坐标
 *  @param originPoint 原点坐标
 *  @param {number} degree 旋转角度
 *  @param {number} len 长度
 *  @return {OriginPoint} 另一点坐标
 */
export const calculateCoordinatePoint = (originPoint: OriginPoint, degree: number, len: number): OriginPoint => {
    let rotate: number = (degree - 90 + 360) % 360; //这里是因为一开始以y轴下方为0度的
    let point: OriginPoint = {
        x: len,
        y: 0
    };
    //计算某一点旋转后的坐标点,这里假设传入的点为原点
    let relativeOriginPoint: OriginPoint = calculateRotate(point, rotate);
    //计算相对坐标系的坐标
    return calculateCoordinateRelativePoint(originPoint, relativeOriginPoint);
};


/**
 * 计算某一点旋转后的坐标点
 * @param {OriginPoint} point 原点坐标
 * @param {number} degree 旋转角度
 * @return {OriginPoint}
 */
export const calculateRotate = (point: OriginPoint, degree: number): OriginPoint => {
    let x: number = point.x * Math.cos(degree * Math.PI / 180) + point.y * Math.sin(degree * Math.PI / 180);
    let y: number = -point.x * Math.sin(degree * Math.PI / 180) + point.y * Math.cos(degree * Math.PI / 180);
    return {
        x: Math.round(x * 100) / 100,
        y: Math.round(y * 100) / 100
    };
};


/**
 * 计算相对坐标系的坐标
 * @param {OriginPoint} origin 原点坐标
 * @param {OriginPoint} relativeOriginPoint 相对原点坐标
 */
export const calculateCoordinateRelativePoint = (origin, relativeOriginPoint): OriginPoint => {
    let x = relativeOriginPoint.x + origin.x;
    let y = relativeOriginPoint.y + origin.y;
    return {
        x: Math.round(x * 100) / 100,
        y: Math.round(y * 100) / 100
    };
};

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容