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

如何用Python计算三个极坐标点的∠FY00-FY01-FY02夹角?

用Python计算极坐标点构成的∠FY00-FY01-FY02

核心思路

要计算∠FY00-FY01-FY02,本质是求FY01点处,FY01指向FY00和FY01指向FY02两个向量的夹角。步骤分为:极坐标转直角坐标→构造目标向量→用向量点积公式计算夹角。

具体实现步骤

  1. 极坐标转直角坐标
    极坐标(ρ, θ)转直角坐标(x, y)的公式:

    • x = ρ × cos(θ_rad)
    • y = ρ × sin(θ_rad)
      注意:Python标准库的三角函数默认使用弧度,所以需要先把角度θ转换成弧度。
  2. 构造目标向量

    • 向量v1:FY01 → FY00,即 (FY00_x - FY01_x, FY00_y - FY01_y)
    • 向量v2:FY01 → FY02,即 (FY02_x - FY01_x, FY02_y - FY01_y)
  3. 用点积计算夹角
    向量点积公式:

    dot_product = v1_x*v2_x + v1_y*v2_y
    |v1| = sqrt(v1_x² + v1_y²)
    |v2| = sqrt(v2_x² + v2_y²)
    cos_theta = dot_product / (|v1| * |v2|)
    

    通过arccos(cos_theta)得到弧度值,再转回角度就是最终结果。

完整代码示例

import math

# 定义极坐标点(ρ, θ),θ单位为角度
FY00 = [0, 0]
FY01 = [100, 0]
FY02 = [98, 40.10]

def polar_to_cartesian(rho, theta_deg):
    """极坐标转直角坐标,theta为角度"""
    theta_rad = math.radians(theta_deg)
    x = rho * math.cos(theta_rad)
    y = rho * math.sin(theta_rad)
    return (x, y)

# 转换所有点到直角坐标
fy00_x, fy00_y = polar_to_cartesian(*FY00)
fy01_x, fy01_y = polar_to_cartesian(*FY01)
fy02_x, fy02_y = polar_to_cartesian(*FY02)

# 构造向量
v1_x = fy00_x - fy01_x
v1_y = fy00_y - fy01_y
v2_x = fy02_x - fy01_x
v2_y = fy02_y - fy01_y

# 计算点积和模长
dot_product = v1_x * v2_x + v1_y * v2_y
v1_mag = math.hypot(v1_x, v1_y)
v2_mag = math.hypot(v2_x, v2_y)

# 计算夹角(弧度转角度)
cos_angle = dot_product / (v1_mag * v2_mag)
# 处理浮点精度问题,确保cos_angle在[-1,1]范围内
cos_angle = max(min(cos_angle, 1.0), -1.0)
angle_rad = math.acos(cos_angle)
angle_deg = math.degrees(angle_rad)

print(f"∠FY00-FY01-FY02的角度为:{angle_deg:.2f}°")

说明

  • 代码中加入了对cos_angle的范围限制,避免浮点计算误差导致超出acos的有效输入范围([-1,1])。
  • 最终结果保留两位小数,可根据需求调整精度。

内容的提问来源于stack exchange,提问作者P. Scotty

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 13:50:20