我有3个点((x,y),(x',y'),(x'',y''))我想在3点找到角度 我还需要在有角度和其他2个点时得到一个观点(但这应该不是问题)
如果有帮助 - 我正在使用c#
答案 0 :(得分:1)
对于一般的非直角三角形,您需要所谓的Law of Cosines。这允许您计算三角形每个角的内角,给定每边的长度。你可以使用毕达哥拉斯平等来计算每一方的长度。
问题的第二部分没有明确说明。
答案 1 :(得分:0)
阅读以下内容: http://en.wikipedia.org/wiki/Trigonometric_functions和http://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基本相同。