目录
一、构成直角三角形和三角形的条件证明
1、三角形构成条件证明:
在初中数学教材中,只给出了“三角形的两边之和大于第三边”的证明。
证明:对于任意一个△ABC,如果把其中任意两个顶点(例如B、C)看成定点,由“两点之间,线段最短”可得:AB+AC>BC
同理有:
AC+BC>AB,AB+BC>AC
即:三角形的两边之和大于第三边。
这个结论等同于:三角形⇒两边之和大于第三边,即只证明了“三角形”是“两边之和大于第三边”的充分条件。
实际上,它的逆命题也是成立的,即如果任意两边之和大于第三边⇒三角形,这就是能构成三角形的条件。
我们知道,如果由A可以推出B,由B可以推出A,则A是B的充要条件,所以“任意两边之和大于第三边”是构成三角形的充分必要条件。
下面来证明这个逆命题:
1)简化命题。
“任意两边之和大于第三边”这个命题听起来像一统江湖的任我行教主一样霸道,实际上只不过是吹起来泡沫,就像把小米粒大的黄金镀到铜上变成金砖一样。更夸张的是,并不是只变成一块金砖,而是三块:a+b>c,a+c>b,b+c>a。
注意,这三个条件是“与”的关系,即他们要同时成立,然后去证明能构成三角形。
这显然有些复杂,让人不知道从哪下手。根本原因在于它只给出了三个变量的相互关系,不知道两个变量之间及单个变量的关系。这和三元一次方程比二元一次方程、一元一次方程难解是一个道理。
不难看出,“任意两边之和大于第三边”这个命题只适合作结论,不适合作条件。
所以,首先我们要将这个条件进行简化,把它转化成一个更简单的等价命题:两边之和大于最长边。这其实很好理解,如果第三边不是最长边,显然其他两边中至少有一边是大于第三边的,故另外两边之和一定大于第三边,所以只需考虑第三边是最长边的情况即可。
上述结论用不等式也可以证明:
设c为最长边,a、b为较短边,则已知条件为:0<a≤c,0<b≤c,a+b>c。
由a+c>c,0<b≤c得a+c>b;由b+c>c,0<a≤c得b+c>a。
由以上可知,归根到底,“两边之和大于最长边”才是构成三角形的充要条件,而“任意两边之和大于第三边”只不过是由“两边之和大于最长边”镀成的金砖。
2)证明。
设c为最长边,a、b为较短边,则已知条件为:0<a≤c,0<b≤c,a+b>c。
把a、b、c想象成三根木棍,现在把最长的木棍c用胶水粘牢在桌面上(即看作固定边),把a、b两根木棍的一头固定到c的两个端点上,另一头可以在桌面上随意摆动,显然它们划过的轨迹是一个分别以A、B为圆点,以a、b为半径的圆。那么只要证明这两个圆是相交的(即存在图中的C、D交点),就能证明这三个边可以构成三角形。
两圆相交的充要条件是:圆心距小于两圆半径之和,大于两圆半径之差。
c就是两圆圆心距,a、b就是两圆半径。
因为a+b>c,所以满足圆心距小于两圆半径之和。
因为0<a≤c,0<b≤c,所以a-b≤c-b<c,b-a≤c-a<c,即圆心距大于两圆半径之差。
故两圆相交,存在交点C、D,连接AC、BC,构成△ABC,且AC=b,BC=b,AB=c,故这三个边可以构成三角形。
2、直角三角形构成条件证明:
关于勾股定理和其逆定理,初中数学教材中都有完整的证明。
(1) 勾股定理:如果直角三角形的两条直角边长分别为a,b,斜边长为c,那么 。
下面介绍教材中的“赵爽弦图”证明方法,这种方法是我国汉代的赵爽在注解《周髀算经》时提出的。
证明过程如下:
把边长为a、b的两块正方形木板边挨边对齐,用哥俩好将接缝处粘牢。按下图画线、上色,将整块木板分为四个一样的直角三角形(红色)和一个正方形(黄色)。沿下图斜线将木板切开。
将切下的两个红色直角三角形以一个华丽的转身移至图形上方如图位置,再用哥俩好粘牢。
最后形成这样一个优美的图形,它就是“赵爽弦图”。整个图形由原来的以a、b为边长的两个正方形变成一个以直角三角形斜边c为边长的正方形。
好了,整个过程就是一次手工制作,至此咱们已经完成了勾股定理的证明。
是的,证明完了,几乎不需要多余的解释。下面的文字描述与如此精妙的方法比起来显得那样的苍白无力:
原来两个正方形的面积和为 ,“切割重拼”后形成的大正方形面积是 ,整个过程面积未发生改为,所以 。
(2) 勾股定理的逆定理:如果三角形的三边长a,b,c满足 ,那么这个三角形是直角三角形。
这个证明过程很简单,但是思路非常有创意。
就是先画一个两条直角边长分别为a,b的直角三角形,然后由勾股定理可知其斜边等于c,这样这个直角三个形与要证的三角形三条对边相等,故两个三角形全等,从而得出要证的三角形为直角三角形。
二、示例代码
给定面积和斜边,目标是如果直角三角形存在则打印所有边,否则打印 -1。我们需要按升序打印所有边。
例子:
输入:6 5
输出:3 4 5
输入:10 6
输出:-1
我们在下面的文章中讨论了该问题的解决方案:
JavaScript 给定斜边和面积找到直角三角形所有边Find all sides of a right angled triangle from given hypotenuse and area
JavaScript 给定斜边和面积找到直角三角形所有边Find all sides of a right angled triangle from given hypotenuse and area-CSDN博客
PHP 根据给定的斜边和面积找到直角三角形的所有边 Find all sides of a right angled triangle from given hypotenuse and area
PHP 根据给定的斜边和面积找到直角三角形的所有边 Find all sides of a right angled triangle from given hypotenuse and area-CSDN博客
C# 根据给定的斜边和面积找到直角三角形的所有边 Find all sides of a right angled triangle from given hypotenuse and area
C# 根据给定的斜边和面积找到直角三角形的所有边 Find all sides of a right angled triangle from given hypotenuse and area-CSDN博客
Python 根据给定的斜边和面积找到直角三角形的所有边Find all sides of a right angled triangle from given hypotenuse and area
Python 根据给定的斜边和面积找到直角三角形的所有边Find all sides of a right angled triangle from given hypotenuse and area-CSDN博客
Java 根据给定的斜边和面积找到直角三角形的所有边(Find all sides of a right angled triangle from given hypotenuse and area)
Java 根据给定的斜边和面积找到直角三角形的所有边(Find all sides of a right angled triangle from given hypotenuse and area)-CSDN博客
c++ 根据给定的斜边和面积找到直角三角形的所有边(Find all sides of a right angled triangle from given hypotenuse and area)
c++ 根据给定的斜边和面积找到直角三角形的所有边(Find all sides of a right angled triangle from given hypotenuse and area)_直角三角形答案c++-CSDN博客
在上面这些篇文章中,讨论了具有以下逻辑的新解决方案:
让两个未知边分别为 a 和 b
面积:A = 0.5 * a * b
斜边的平方:H^2 = a^2 + b^2
代入 b,我们得到 H² = a² + (4 * A ² )/a² ,公式图:
重新排列后,我们得到方程 a^4– (H²)(a²) + 4*(A²) ,公式图:
该方程的判别式 D 为 D = H^4 – 16*(A²) ,公式图:
如果 D = 0,则根由线性方程公式给出,根 = (-b +- sqrt(D) )/2*a
这些根等于边的平方,求平方根就可以得到边。
// C# program to check existence of
// right triangle.
using System;
class GFG {
// Prints three sides of a right triangle
// from given area and hypotenuse if triangle
// is possible, else prints -1.
static void findRightAngle(double A, double H)
{
// Descriminant of the equation
double D = Math.Pow(H, 4) - 16 * A * A;
if (D >= 0) {
// applying the linear equation
// formula to find both the roots
double root1 = (H * H + Math.Sqrt(D)) / 2;
double root2 = (H * H - Math.Sqrt(D)) / 2;
double a = Math.Sqrt(root1);
double b = Math.Sqrt(root2);
if (b >= a)
Console.WriteLine(a + " " + b + " " + H);
else
Console.WriteLine(b + " " + a + " " + H);
}
else
Console.WriteLine("-1");
}
// Driver code
public static void Main()
{
findRightAngle(6, 5);
}
}
// This code is contributed by vt_m.
输出:
3 4 5
时间复杂度:由于使用内置 sqrt 函数,因此为 O(log(n))
辅助空间: O(1)