极坐标与笛卡尔坐标系统

极坐标系是用来描述方向角度和距离的。

极坐标是指在平面内取一个定点O,叫极点,引一条射线Ox,叫做极轴,再选定一个长度单位和角度的正方向(通常取逆时针方向)。 对于平面内任何一点M,用ρ表示线段OM的长度(有时也用r表示),θ表示从Ox到OM的角度,ρ叫做点M的极径,θ叫做点M的极角,有序数对(ρ,θ)就叫点M的极坐标,这样建立的坐标系叫做极坐标系。

极坐标系中的角度通常表示为角度或者弧度,斜边为r。

三维极坐标也称之为空间极坐标,常见的运用是球坐标 (r, θ, φ) :径向距离 r,方位角 θ(theta)与极角 φ(phi)


📐 数学公式

极坐标系中的两个坐标r和θ可以由下面的公式转换为直角坐标系下的坐标值:
x = r * cos(θ)
y = r * sin(θ)


球坐标系中的公式:
r = sqrt(++)
θ = arccos(z ÷ r)
ϕ = arctan(y ÷ z)

x = r * sinθ * cosϕ
y = r * sinθ * sinϕ
z = r * cosθ


注意:程序中的sin和cos的参数是弧度,不是度数。
换算方法:
sin30° = sin(π ÷ 6) = Math.sin(Math.PI ÷ 6) = 0.49999999999999994 = 0.5

📌 JavaScript

参考代码:index.js

/*
* 极坐标换算(二维)
*
* @param {Object} {x, y} - 笛卡尔坐标系中的对象(单位为像素)
* @returns {Vector2} 返回极坐标 (线段的长度r,角度​θ(弧度表示))
*/
export function cartesianToPolar({ x, y }) {
    
    const r = Math.sqrt(x * x + y * y);
    const theta = Math.atan2(y, x);

    return { x: r, y: theta };
}



/*
* 极坐标换算(三维)
*
* @param {Object} {x, y, z} - 三维笛卡尔坐标系中的对象(单位为像素)
* @returns {Vector3} 返回球面坐标
*/
export function cartesianToSphericalPolar({x, y, z}) {
    const nx = Math.cos(x) * Math.cos(y) * z,
        nz = Math.cos(x) * Math.sin(y) * z,
        ny = Math.sin(x) * z;

    return { x: nx, y: ny, z: nz };
}

测试:test.js

import { cartesianToPolar, cartesianToSphericalPolar } from './index';


/*
坐标 (10,10) 在坐标系里其实就是一个等腰直角三角形(0.7853981633974483弧度相当于45度角), 输出结果:{x: 14.142135623730951, y: 0.7853981633974483}
*/
console.log(cartesianToPolar({x: 10, y: 10})); 


/*
坐标 (10,10,2) 转化成球面坐标, 输出结果:{x: 1.408082061813392, y: -1.0880422217787395, z: 0.9129452507276276}
*/
console.log(cartesianToSphericalPolar({x: 10, y: 10, z: 2}));