算法提高 12-1三角形

来源:互联网 发布:js控制元素隐藏 编辑:程序博客网 时间:2024/05/29 03:37
  算法提高 12-1三角形  
时间限制:1.0s   内存限制:256.0MB
    
问题描述
  为二维空间中的点设计一个结构体,在此基础上为三角形设计一个结构体。分别设计独立的函数计算三角形的周长、面积、中心和重心。输入三个点,输出这三个点构成的三角形的周长、面积、外心和重心。结果保留小数点后2位数字。
样例输出
与上面的样例输入对应的输出。
例:
数据规模和约定
  输入数据中每一个数的范围。
  例:doule型表示数据。
一大波公式即将来袭给定三角形三个顶点的坐标,如何求三角形的外心的坐标呢?例如 :给定a(x1,y1) b(x2,y2) c(x3,y3)求外接圆心坐标O(x,y)首先,外接圆的圆心也就是三角形的外心是三角形三条边的垂直平分线的交点,我们根据圆心到顶点的距离相等,可以列出以下方程:(x1-x)(x1-x)-(y1-y)(y1-y)=(x2-x)(x2-x)+(y2-y)(y2-y);(x2-x)(x2-x)+(y2-y)(y2-y)=(x3-x)(x3-x)+(y3-y)(y3-y); 2*(x2-x1)*x+2*(y2-y1)y=x2^2+y2^2-x1^2-y1^2; 2*(x3-x2)*x+2*(y3-y2)y=x3^2+y3^2-x2^2-y2^2;令A1=2*(x2-x1); B1=2*(y2-y1); C1=x2^2+y2^2-x1^2-y1^2; A2=2*(x3-x2); B2=2*(y3-y2); C2=x3^2+y3^2-x2^2-y2^2;即A1*x+B1y=C1;A2*x+B2y=C2;根据克拉默法则:x=((C1*B2)-(C2*B1))/((A1*B2)-(A2*B1));y=((A1*C2)-(A2*C1))/((A1*B2)-(A2*B1));重心是三角形三边中线的交点。  x = ( x1 + x2 + x3) / 3y = ( y1 + y2 + y3) / 3
#include<iostream>
#include <cstdio>#include <cmath>#include <vector>#include <queue>#include <cstring>#include <algorithm>#include <cstdlib>#define for(i,x,n) for(int i=x;i<n;i++)#define ll long long int#define INF 0x3f3f3f3f#define MOD 1000000007#define MAX_N 50005using namespace std;struct triangle{    double x,y;};triangle a,b,c;double perimeter(triangle a,triangle b,triangle c)//周长{    double d1=sqrt(pow(a.x-b.x,2)+pow(a.y-b.y,2));    double d2=sqrt(pow(b.x-c.x,2)+pow(b.y-c.y,2));    double d3=sqrt(pow(a.x-c.x,2)+pow(a.y-c.y,2));    return d1+d2+d3;}double area(triangle a,triangle b,triangle c)//面积:海伦公式:s=sqrt(p*(p-a)*(p-b)*(p-c)){    double d1=sqrt(pow(a.x-b.x,2)+pow(a.y-b.y,2));    double d2=sqrt(pow(b.x-c.x,2)+pow(b.y-c.y,2));    double d3=sqrt(pow(a.x-c.x,2)+pow(a.y-c.y,2));    double p=(d1+d2+d3)/2;    double area=sqrt(p*(p-d1)*(p-d2)*(p-d3));    return area;}triangle external(triangle aa,triangle bb,triangle cc)//中心{    double a=2*(aa.x-bb.x);    double b=2*(aa.y-bb.y);    double z=aa.x*aa.x-bb.x*bb.x+aa.y*aa.y-bb.y*bb.y;    double a1=2*(cc.x-bb.x);    double b1=2*(cc.y-bb.y);    double z1=cc.x*cc.x-bb.x*bb.x+cc.y*cc.y-bb.y*bb.y;    triangle ex;    ex.x=((z*b1)-(z1*b))/((a*b1)-(a1*b));    ex.y=((a*z1)-(a1*z))/((a*b1)-(a1*b));    return ex;}triangle gravityOfCenter(triangle a,triangle b,triangle c)//重心{    triangle gra;    gra.x=(a.x+b.x+c.x)/3;    gra.y=(a.y+b.y+c.y)/3;    return gra;}int main(){    scanf("%lf %lf",&a.x,&a.y);    scanf("%lf %lf",&b.x,&b.y);    scanf("%lf %lf",&c.x,&c.y);    printf("%.2lf\n",perimeter(a,b,c));    printf("%.2lf\n",area(a,b,c));    printf("%.2lf %.2lf\n",external(a,b,c).x,external(a,b,c).y);    printf("%.2lf %.2lf\n",gravityOfCenter(a,b,c).x,gravityOfCenter(a,b,c).y);    return 0;}

0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 zx100不支持播放怎么办 电机过载保护怎么办 没土地证怎么办不动产 话筒有杂音怎么办 暗器洗不出完美怎么办 折刀合不紧怎么办 钢笔水枪怎么办 服务器cpu100怎么办 服务器cpu过高怎么办 背部毛孔大怎么办 艾灸盒太烫了怎么办 婚姻不幸怎么办 木地板渗水怎么办 卫生间地面渗水怎么办 企业倒闭后员工怎么办 公司不帮买社保怎么办 如果失踪了怎么办 公司要求辞职怎么办 失业后五险一金怎么办 车辆年审委托书怎么办 检察院不公怎么办 老师打人怎么办 精神病人打人怎么办 燃气灶开孔小了怎么办 手机没有手电筒怎么办 头发太细太软怎么办 手绘没有扫描仪怎么办 童车租赁怎么办 ps很卡怎么办 炸牙签肉粘锅怎么办 墨盒堵住了怎么办 hp1005卡纸怎么办 耳机线脏了怎么办 搓纸轮老化变硬怎么办 hp m1213nf卡纸怎么办 电脑进不去pe怎么办 京瓷复印机卡纸怎么办 京瓷6500卡纸怎么办 kyocera卡纸怎么办 键盘无法打字怎么办 硒鼓用完了怎么办