首先找出起点和终点之间的区别(这里,这更多的是一条有向线段,而不是“直线”,因为直线无限延伸,而不是从某个特定点开始)。deltaY = P2_y - P1_y
deltaX = P2_x - P1_x
然后计算角度(从P1的正X轴到P1的正Y轴)。angleInDegrees = arctan(deltaY / deltaX) * 180 / PI
但是arctan可能并不理想,因为这样划分差异将消除区分角度所在象限所需的区别(见下文)。如果您的语言包含一个atan2函数,请使用以下内容:angleInDegrees = atan2(deltaY, deltaX) * 180 / PI
编辑(2017年2月22日):然而,一般来说,仅仅为了获得cos和sin的正确角度而调用atan2(deltaY,deltaX)可能是不雅的。在这些情况下,您通常可以执行以下操作:将(deltaX, deltaY)视为向量。
将该向量规格化为单位向量。为此,将deltaX和deltaY除以向量的长度(sqrt(deltaX*deltaX+deltaY*deltaY)),除非长度为0。
之后,deltaX将是向量和水平轴之间的夹角的余弦(在P1处从正X轴到正Y轴的方向)。
现在deltaY就是这个角度的正弦。
如果向量的长度为0,它与水平轴之间就没有夹角(因此它就没有有意义的正弦和余弦)。
编辑(2017年2月28日):即使没有规范化(deltaX, deltaY):符号deltaX将告诉您步骤3中描述的余弦是正的还是负的。
符号deltaY将告诉您步骤4中描述的正弦是正的还是负的。
符号deltaX和deltaY将告诉您相对于P1处