假设我有3个点A,B,C,它们具有坐标A(x1,y1),B(x2,y2),C(x3,y3)。检查三角形是否为钝角三角形(角度大于90度)的最佳方法是什么。
感谢阅读。
答案 0 :(得分:2)
正如Abhishek Bansal所说,这是math.stackexchange.com的问题。
无论如何,我用3分向你展示数学过程,你应该把它作为代码实现:
A=(2,-3,4), B=(0,1,2), C=(-1,2,0)
vector AB = B-A = (0,1,2) - (2,-3,4) = (-2,4,-2)
vector AC = C-A = (-1,2,0) - (2,-3,4) = (-3,5,-4)
vector CB = B-C = (0,1,2) - (-1,2,0) = (1,-1,2)
AB.AC = ||AB||.||AC || cos α
(-2,4,-2).(-3,5,-4) = √(-2)²+(4)²+(-2)² . √(-3)²+(5)²+(-4)² .cos α
(-2)(-3)+(4)(5)+(-2)(-4) = √(24).√(50) .cos α
18 = 10√30 cos α
cos α = 18/10√30
“α”它在矢量之间是可能的,因此AB y AC es agudo
对其他案件也这样做:
AB.CB = ||AB||.||CB || cosβ
AC.CB = ||AC||.|CB|| cosγ
答案 1 :(得分:2)
这样做的一个简单方法是, 鉴于3坐标, 通过标准公式
找出三角形的三边(X,Y,Z)的长度length=√((x2-x1)^2+(y2-y1)^2)
现在提供了三角形,
采取最短的两个方面。
我们假设它们是X and Y
。
现在,如果
Z^2 > (X^2+ Y^2)
然后三角形是钝的。
(可以从对于正三角形Z^2=(X^2 + Y^2)
)
答案 2 :(得分:0)
这实际上是一个数学问题,而不是java问题,因为答案非常依赖于语言。你需要拿走每一对的dot product。
double x1, x2, x3, y1, y2, y3;
...
double dotAB = (x1 - x3) * (x2 - x3) + (y1 - y3) * (y2 - y3); // (A - C) * (B - C)
double dotBC = ... // ditto for (B - A) * (C - A)
double dotAC = ... // ditto for (A - B) * (C - B)
if(dotAB * dotBC * dotAC < 0){ OR if(dotAB < 0 || dotBC < 0 || dotAC < 0){
// do obtuse processing
}
如果任何点积变为负数,则表示您有一个钝角三角形。由于三角形只能有一个钝角,所以将三者相乘可以告诉你其中一个是否也是负的。
答案 3 :(得分:0)
我认为我们可以通过以下步骤解决这个问题: -
使用两点公式之间的坐标几何距离计算三角形的三边,即dist(A,B)。这将给出三角形的三面
取两个给定三角形的短边并用它们来计算直角三角形的斜边。
将斜边与问题中给出的最长边进行比较。如果最长的给定边比斜边短,则给定的三角形是锐角。如果它比斜边长,则给定的三角形是钝的。