极坐标与笛卡尔坐标系统
极坐标系是用来描述方向角度和距离的。
极坐标是指在平面内取一个定点O,叫极点,引一条射线Ox,叫做极轴,再选定一个长度单位和角度的正方向(通常取逆时针方向)。 对于平面内任何一点M,用ρ表示线段OM的长度(有时也用r表示),θ表示从Ox到OM的角度,ρ叫做点M的极径,θ叫做点M的极角,有序数对(ρ,θ)就叫点M的极坐标,这样建立的坐标系叫做极坐标系。极坐标系中的角度通常表示为角度或者弧度,斜边为r。
三维极坐标也称之为空间极坐标,常见的运用是球坐标 (r, θ, φ) :径向距离 r,方位角 θ(theta)与极角 φ(phi)
📐 数学公式
极坐标系中的两个坐标r和θ可以由下面的公式转换为直角坐标系下的坐标值: x = r * cos(θ) y = r * sin(θ) 球坐标系中的公式: r = sqrt(x² + y² + z²) θ = 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}));