给出3个点时计算三角形的角度

时间:2011-07-16 19:06:31

标签: c# geometry 2d angle

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

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

3 个答案:

答案 0 :(得分:1)

对于一般的非直角三角形,您需要所谓的Law of Cosines。这允许您计算三角形每个角的内角,给定每边的长度。你可以使用毕达哥拉斯平等来计算每一方的长度。

问题的第二部分没有明确说明。

答案 1 :(得分:0)

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

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

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

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

然后在每个值上取得arccos以找到角度。

研究trig,进行研究,并将上述方程式转换为代码。

答案 2 :(得分:0)

嗯,最简单的是使用标量积:

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's基本相同。