如何找到一条直线的反正切?

15

我有一条线段(x1,y1)和(x2,y2),我想使用反正切函数来计算这条线段的夹角,在Java中应该如何实现?

我想知道这条线段相对于点x1,y1所成的角度。


2
一个单独的线段没有角度,除非它是相对于某个东西来说的。你的参考点是什么?是0,0吗? - Noon Silk
2
@Meow,一条直线和该直线上的一个点之间不存在角度;你是指@stacker回答中概述的内容吗? - Pops
我认为很明显他在谈论arctan((y2 - y1) / (x2 - x1))。 - JeremyP
1
@Troubadour:因为并不是每个人都像这里那些说“你还没有定义问题”的人一样过于严谨。大多数人已经读到了关于(x1,y1)和(x2,y2)的部分,并假设提问者所说的角度是线段与x轴之间的夹角。这其实很明显。 - JeremyP
2
@JeremyP:我不同意。看看这个问题,它只是昨天才被提出来的。当这个问题第一次被提出时,听起来好像他们想知道两个向量之间的角度,实际上那是问题的原始标题,但在文本中有一些不太明显的指示与之相矛盾。许多答案都是基于人们“做出的假设”,结果证明这些假设是无关紧要的。 - Troubadour
显示剩余4条评论
4个回答

30

您需要:

Math.toDegrees(Math.atan((y2-y1)/(x2-x1)))

请注意x1=x2时的异常情况。


2
使用 atan2 函数,你就可以避免这个问题。 - Alex Feinman
1
为什么会返回一个负角度? - Skizit
1
由于atan返回(-Pi/2, Pi/2)之间的值。使用Math.atan2()似乎可以解决Math.atan使用中的问题。如果需要正值,只需在收到负值时添加2 * Pi即可。 - Gedrox

25

使用Math.atan2函数。它类似于arctan,但知道x和y坐标,因此可以处理水平、垂直或指向其他方向的线路——arctan在-pi/2到pi/2范围内不会为某些线路提供正确答案。


20

atan2 函数帮助解决了这个问题,同时避免了除以零等边界条件。

Math.atan2(y2-y1, x2-x1)

3

链接现在已经失效。 - Ascalonian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接