求SVG圆形polarToCartesian的逆函数:笛卡尔坐标转极坐标
实现极坐标转笛卡尔坐标函数的逆函数
你提到的原函数用于将极坐标(圆心、半径、角度)转换为笛卡尔坐标,其核心是将角度偏移90度后再进行弧度转换计算。对应的逆函数需要从笛卡尔坐标反推回原函数使用的角度值,以下是实现代码:
function cartesianToPolarAngle(centerX, centerY, radius, x, y) { // 计算点相对于圆心的坐标差 const dx = x - centerX; const dy = y - centerY; // 通过atan2计算弧度(基于x轴正方向的逆时针角度) const angleInRadians = Math.atan2(dy, dx); // 转换为角度并修正原函数的90度偏移 let angleInDegrees = (angleInRadians * 180 / Math.PI) + 90; // 确保角度落在0-360的有效值范围内 if (angleInDegrees < 0) { angleInDegrees += 360; } return angleInDegrees; }
逻辑说明:
- 先计算目标点相对于圆心的偏移量
dx和dy,这是反推角度的基础 - 使用
Math.atan2(dy, dx)获取弧度值,该函数能正确处理所有象限的坐标,避免单一Math.atan的象限歧义 - 原函数中对输入角度做了
angleInDegrees - 90的偏移,因此逆过程需要加回90度来还原原始角度 - 最后将负角度修正为0-360范围内的正值,和原函数支持的SVG角度有效值保持一致
这个函数和你提供的polarToCartesian严格一一对应,输入原函数的输出坐标,将返回对应的输入角度值。
内容的提问来源于stack exchange,提问作者moe
相关产品推荐
相关产品推荐

