给定3个点,计算三角形的角度

本文关键字:三角形 计算 3个点 给定 | 更新日期: 2023-09-27 18:02:12

我有3个点((x,y), (x', y'), (x', y')),我想找出这3个点的角度我还需要得到一个点时,有角度和其他2点(但这不应该是一个问题)

如果它有帮助-我正在使用c#

给定3个点,计算三角形的角度

对于一般的非直角三角形,你需要所谓的余弦定理。这允许你在给定每条边的长度的情况下计算三角形每个角的内角。你可以用勾股定理来计算每条边的长度。

你问题的第二部分没有明确规定。

阅读以下内容:http://en.wikipedia.org/wiki/Trigonometric_functions和http://jwbales.us/precal/part6/part6.2.html

cos A = (b^2 + c^2 - A ^2)/(2bc)

cos B = (a^2 + c^2 - B ^2)/(2ac)

cos C = (a^2 + b^2 - C ^2)/(2ab)

然后对得到的每个值求arccos来求角度

学习三角函数,做研究,把上面的方程转换成代码。

最简单的是使用标量积:

double dotprod = (x'' - x)*(x' - x) + (y'' - y)*(y' - y);
double len1 = sqrt((x' - x) * (x' - x) + (y' - y) * (y' - y));
double len2 = sqrt((x'' - x) * (x'' - x) + (y'' - y) * (y'' - y));
double angle = acos(dotprod/(len1*len2));

这应该比使用余弦定理快。

编辑:
如果这样做,我们可以省略一个sqrt:

double dotprod = (x'' - x)*(x' - x) + (y'' - y)*(y' - y);
double len1squared = (x' - x) * (x' - x) + (y' - y) * (y' - y);
double len2squared = (x'' - x) * (x'' - x) + (y'' - y) * (y'' - y);
double angle = acos(dotprod/sqrt(len1squared*len2squared));

这个计算和@David的基本相同