如何从三个点计算角度?[已关闭]

8 浏览
0 Comments

如何从三个点计算角度?[已关闭]

假设你有以下内容:

P1 = (x=2, y=50)
P2 = (x=9, y=40)
P3 = (x=5, y=20)

假设P1是一个圆的中心点。它始终保持不变。

我想要计算由P2P3组成的角度,或者换句话说,紧邻P1的角度。确切地说,它始终是一个锐角,所以小于-90度。

我想:哇,这是简单的几何数学问题。但是我已经花了大约6个小时寻找公式,只找到了人们谈论复杂的NASA相关的内容,比如反余弦和向量标量积之类的东西。我感觉像是头被放进了冰箱里。

这里有数学大师认为这是一个简单的问题吗?我不认为编程语言在这里有什么影响,但是对于那些认为有影响的人来说:Java和Objective-C。我需要这两种语言的解决方案,但是我没有为它们打标签。

0
0 Comments

问题:如何从三个点计算角度?

原因:这个问题的出现是因为需要计算三个点之间的角度,但很多人对于如何计算角度存在困惑。

解决方法:最好的解决方法是使用atan2(y, x)函数。给定一个点x, y,该函数会返回从该点到X轴正方向的角度。具体的计算方法是将两个点通过-P1进行平移(也就是将所有点平移,使得P1位于原点),然后计算P3P2的绝对角度之差。使用atan2的优点是可以表示整个圆周(可以得到-π到π之间的任意角度),而使用acos则需要根据正负值来处理多种情况才能计算正确的结果。唯一的特殊情况是当点为(0, 0)时,此时P2P3必须与P1不同,否则谈论角度就没有意义。

补充回答:感谢你的回答,这正是我想要的。这是一个简单的解决方案,如果值为负数,只需加上2pi即可轻松得到逆时针角度。

补充回答:确实,atan2正是这个问题所需要的,但看起来大多数人不会阅读或者不理解为什么基于acos的解决方案是不好的。幸运的是,我已经过了多年前的“互联网上有人错了”的阶段,我不会为了捍卫显而易见的事实而开始争论。

补充回答:感谢你的回答,但你能处理三维情况吗?

补充回答:在三维空间中,如何定义角度?更具体地说,角度是否可以为负数或超过π(180度)?在三维空间中,两个非平行向量定义了一个平面,但这个平面可以从两个方向“看到”:从一边看,A看起来“在B的左边”,从另一边看,A看起来“在B的右边”...

补充回答:感谢你的回答,我在思考问题之前就发布了回答。现在我已经弄清楚了。

0
0 Comments

计算三个点之间的角度可以通过将其看作两个向量来简化问题,即从点P1到P2的向量和从点P1到P3的向量。我们可以使用向量的坐标差来表示这两个向量:

a = (p1.x - p2.x, p1.y - p2.y)

b = (p1.x - p3.x, p1.y - p3.y)

然后,我们可以使用点积公式的倒数来计算角度:

点积公式:dot product

角度公式:angle between two vectors

需要注意的是:dot product 表示两个向量的点积,即a1*b1 + a2*b2(这里只考虑二维情况)。

你也可以尝试使用 atan2 函数来解决问题。

0
0 Comments

如何从三个点计算角度?

如果你指的是以P1为顶点的角度,可以使用余弦定理进行计算:

arccos((P12^2 + P13^2 - P23^2) / (2 * P12 * P13))

其中,P12是从P1到P2的线段长度,计算方法如下:

sqrt((P1x - P2x)^2 + (P1y - P2y)^2)

在某些语言中,acos常用的符号是cos^-1,但acos的表示更加明确。

只有少数语言使用符号'^'表示乘方,所以如果你不想使用arcos,可以直接输入cos⁻¹。(如果你使用的是商业操作系统,并且很难输入指数,我相信你可以购买一些键盘应用程序,或者安装一个浏览器插件。或者你可以在网络上搜索并复制粘贴。)

在实际回答中,我只在注释中使用'^',因为HTML的限制。在任何实际回答中,我肯定会使用上下标符号。

它是arccos,而不是arcos。

值得一提的是,这个公式是从“余弦定理”推导出来的。所以人们不要以为我们在施展魔法 🙂

如果你想要找到角度的符号,请查看下面的atan2解决方案。

0