已知线段起点坐标、角度、长度计算终点坐标的代码失效问题
已知线段起点、角度、长度求解终点坐标的正确实现
原有代码的错误原因
你写的计算逻辑存在3个致命问题,导致绝大多数场景下结果错误:
- 滥用
abs()取绝对值:三角函数计算结果的正负直接对应坐标偏移的方向,强行取绝对值会丢失第二、三、四象限的方向信息,比如180度方向(X轴负方向)的偏移会被错误算成X轴正方向 - 滥用
round()做四舍五入:math.cos()、math.sin()返回的是[-1,1]区间的连续浮点值,四舍五入后只会得到-1、0、1三个整数,相当于仅支持0度、90度、180度、270度、45度这类特殊角度,任意其他角度的偏移量都会算错 - 未做角度单位转换:Python标准库
math模块的三角函数入参要求是弧度值,如果你传入的是日常使用的0-360度角度值,不做转换的话计算结果完全不符合预期
正确计算代码
import math # 如果你的Angle变量是0-360度的角度值(0度对应X轴正方向,逆时针旋转为正),先转弧度 angle_rad = math.radians(Angle) X_B = X_A + length * math.cos(angle_rad) Y_B = Y_A + length * math.sin(angle_rad)
特殊场景适配
如果你用的是屏幕/图像类的像素坐标系(Y轴向下为正,和数学坐标系Y轴方向相反),只需要把Y方向的计算逻辑调整为:
Y_B = Y_A - length * math.sin(angle_rad)如果需要整数坐标结果,只在最终计算完成后再根据需求做取整,不要提前对三角函数值取整。
内容的提问来源于stack exchange,提问作者hehe boi
相关产品推荐
相关产品推荐

