求解二元一次方程开方和

h一直等于零,s也得与零
我感觉这条代码计算不会执行 n == sqrt(pow(z,2)-pow(h,2))+sqrt(pow(c,2)-pow(h,2));

img

    int main()           //三角形面积    || 求高法    
{    
    float z,c,n,h,s;
    
    float x1,y1;    //坐标1                              
    float x2,y2;    //坐标2
    float x3,y3;    //坐标3 
    scanf("%f %f %f %f %f %f",&x2,&y2,&x1,&y1,&x3,&y3); 
    z = sqrt(pow((x2-x1),2)+pow((y2-y1),2));   //第一边 
    c = sqrt(pow((x3-x2),2)+pow((y3-y2),2));    //第二边 
    n = sqrt(pow((x1-x3),2)+pow((y1-y3),2));    //第三边 
    if(z+c>n)     //判断条件为两边之和大于第三边       
    {
        n == sqrt(pow(z,2)-pow(h,2))+sqrt(pow(c,2)-pow(h,2));   /*勾股定理:最短两条边减去高相加的和,
                                                                等于第三边     h:高*/
        printf("高为:%g",h);  // 求高
        printf("面积为:%.2f",h*n/2);         //底为最长边 
    }
    else if(z+n>c)
    {
        c == sqrt(pow(z,2)-pow(h,2))+sqrt(pow(n,2)-pow(h,2)); 
        printf("%g",h);
        printf("面积为:%.2f",h*c/2); 
    }
    else if(c+n>z)
    {
        z == sqrt(pow(c,2)-pow(h,2))+sqrt(pow(n,2)-pow(h,2)); 
        printf("%g",h);
        printf("面积为:%.2f",h*z/2); 
    }
    return 0;
} 

h没有赋值;

然后,n == sqrt(pow(z,2)-pow(h,2))+sqrt(pow(c,2)-pow(h,2)); 这个是判断是否相等,赋值要改为=;

如果已知三角形三个顶点的坐标,要求三角形的面积,及某条边上的高,通过搜索的链接,可以先使用海伦公式求出三角形的面积,然后可以再利用面积和某条边长, 来计算这条边上的高。

测试代码如下:

参考链接:


海伦公式_百度百科 海伦公式又译作希伦公式、海龙公式、希罗公式、海伦-秦九韶公式。它是利用三角形的三条边的边长直接求三角形面积的公式。表达式为:S=√p(p-a)(p-b)(p-c),它的特点是形式漂亮,便于记忆。相传这个公式最早是由古希腊数学家阿基米德得出的,而因为这个公式最早出现在海伦的著作《测地术》中,所以被称为海伦公式。中国秦九韶也得出了类似的公式,称三斜求积术。 https://baike.baidu.com/item/%E6%B5%B7%E4%BC%A6%E5%85%AC%E5%BC%8F/106956

三角形的高计算公式_百度知道 https://zhidao.baidu.com/question/1510295666080942460.html

任意三角形在线计算,在线计算,在线计算器,计算器在线计算 开源地理空间基金会中文分会实验室,关注开源GIS,开放数据 https://www.osgeo.cn/app/sca44


#include <stdio.h> 
#include <math.h>
int main()           //三角形面积    || 求高法    
{    
    double z,c,n,h,s;
    
    double x1,y1;    //坐标1                              
    double x2,y2;    //坐标2
    double x3,y3;    //坐标3 
    scanf("%lf %lf %lf %lf %lf %lf",&x2,&y2,&x1,&y1,&x3,&y3); 
    z = sqrt(pow((x2-x1),2)+pow((y2-y1),2));   //第一边 
    c = sqrt(pow((x3-x2),2)+pow((y3-y2),2));    //第二边 
    n = sqrt(pow((x1-x3),2)+pow((y1-y3),2));    //第三边 
   // printf("z=%f, c=%f,n=%f\n",z,c,n);
   
   // https://zhidao.baidu.com/question/156107874.html
    if(((z+c)>n)&&((z+n)>c)&&((c+n)>z))     //判断条件为两边之和大于第三边       
    {
        // https://baike.baidu.com/item/%E6%B5%B7%E4%BC%A6%E5%85%AC%E5%BC%8F/106956
        // 利用海伦公式求三角形的面积 
        double p = (z+n+c)/2;
        s=sqrt(p*(p-z)*(p-c)*(p-n));
        
        // https://zhidao.baidu.com/question/1510295666080942460.html
        // 计算边n上的高 
        h = 2*s/n;
        
     //   n = sqrt(pow(z,2)-pow(h,2))+sqrt(pow(c,2)-pow(h,2));   /*勾股定理:最短两条边减去高相加的和,
                                                          //      等于第三边     h:高*/
                     
        // https://www.osgeo.cn/app/sca44                                                  
        printf("高为:%g,",h);  // 求高
        printf("面积为:%.2lf",s);         //底为最长边 
    }
//    else if((z+n)>c)
//    {
//        //n == sqrt(pow(z,2)-pow(h,2))+sqrt(pow(n,2)-pow(h,2)); 
//        double p = (z+n+c)/2;
//        s=sqrt(p*(p-z)*(p-c)*(p-n));
//        h = 2*s/c;  // 计算边c上的高 
//        
//        printf("高为:%g,",h);
//        printf("面积为:%.2lf",h*c/2); 
//    }
//    else if((c+n)>z)
//    {
////        n == sqrt(pow(c,2)-pow(h,2))+sqrt(pow(n,2)-pow(h,2)); 
//        double p = (z+n+c)/2;
//        s=sqrt(p*(p-z)*(p-c)*(p-n));
//        h = 2*s/z;  // 计算边z上的高 
//        
//        printf("高为:%g,",h);
//        printf("面积为:%.2lf",h*z/2); 
//    }
    return 0;
} 
 

img