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

发布于 2024-11-24 14:41:16 字数 1459 浏览 4 评论 0原文

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

油焖大侠 2024-12-01 14:41:16

对于一般的非直角三角形,您需要所谓的余弦定律。这允许您在给定每条边的长度的情况下计算三角形每个角的内角。您可以使用毕达哥拉斯等式计算每条边的长度。

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

For a general, non right angle triangle, you need what is known as the Law of Cosines. This allows you to calculate the internal angles at each corner of the triangle given the lengths of each side. You can calculate the length of each side using the Pythagorean equality.

The second part of your question is not clearly specified.

找个人就嫁了吧 2024-12-01 14:41:16

阅读以下内容:
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 )

然后对得到的每个值取反余弦以找到角度。

研究三角函数,进行研究,并将上述方程转换为代码。

Read the following:
http://en.wikipedia.org/wiki/Trigonometric_functions and 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 )

then take the arccos on each of the values you get to find the angle.

Study trig, do research, and convert the above equations to code.

尛丟丟 2024-12-01 14:41:16

好吧,最简单的方法是使用标量积:

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的相同。

Well, the simplest would be to use the scalar product:

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));

This should be faster than using the law of cosines.

Edit:
We can omit one sqrt if doing this way:

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));

This calculation is basically the same as @David's.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文