假设我有3个点A,B,C,它们具有坐标A(x1,y1),B(x2,y2),C(x3,y3) . 检查三角形是否为钝角三角形(角度大于90度)的最佳方法是什么 .
谢谢阅读 .
这实际上是一个数学问题而不是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 }
如果任何点积都是负数,那么你就有一个钝角三角形 . 由于三角形只能有一个钝角,所以将三者相乘可以告诉你其中一个是否也是负的 .
正如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γ
一个简单的方法是,给定3个坐标,通过标准公式找出三角形的3边(X,Y,Z)的长度
length=√((x2-x1)^2+(y2-y1)^2)
现在提供三角形存在,取2个最短边 . 让我们假设他们是 X and Y . 现在如果
X and Y
Z^2 > (X^2+ Y^2)
然后三角形是钝的 .
(可以从对于正三角形的事实证明, Z^2=(X^2 + Y^2) )
Z^2=(X^2 + Y^2)
我想我们可以通过以下步骤解决这个问题: -
使用两点公式之间的坐标几何距离计算三角形的三边,即dist(A,B) . 这将给出三角形的三个边
取两个给定三角形的短边并用它们计算直角三角形的斜边 .
将斜边与问题中给出的最长边进行比较 . 如果最长的给定边比斜边短,则给定的三角形是锐角 . 如果它比斜边长,则给定的三角形是钝的 .
4 回答
这实际上是一个数学问题而不是java问题,因为答案是非常独立于语言的 . 你将需要采取每对双方的dot product .
如果任何点积都是负数,那么你就有一个钝角三角形 . 由于三角形只能有一个钝角,所以将三者相乘可以告诉你其中一个是否也是负的 .
正如Abhishek Bansal所说,这是math.stackexchange.com的问题 .
无论如何,我向你展示了3分的数学过程,你应该把它作为代码来实现:
“α”它在矢量之间是可能的,所以AB y AC es agudo
对其他情况也这样做:
一个简单的方法是,给定3个坐标,通过标准公式找出三角形的3边(X,Y,Z)的长度
现在提供三角形存在,取2个最短边 . 让我们假设他们是
X and Y
. 现在如果然后三角形是钝的 .
(可以从对于正三角形的事实证明,
Z^2=(X^2 + Y^2)
)我想我们可以通过以下步骤解决这个问题: -
使用两点公式之间的坐标几何距离计算三角形的三边,即dist(A,B) . 这将给出三角形的三个边
取两个给定三角形的短边并用它们计算直角三角形的斜边 .
将斜边与问题中给出的最长边进行比较 . 如果最长的给定边比斜边短,则给定的三角形是锐角 . 如果它比斜边长,则给定的三角形是钝的 .