CF_1C中关于给定正多边形三点坐标,求满足条件的使得面积最小的正多边形。
2013-05-14 16:58
363 查看
#include <stdio.h> #include <math.h> #define pi 3.14159265354 #define esp 1e-4 double gcd(double,double); double edge(double,double,double,double); int main(void) { double x1,y1,x2,y2,x3,y3; double r,A,B,C,a,b,c,area; double n; scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3); a=edge(x1,y1,x2,y2); b=edge(x1,y1,x3,y3); c=edge(x2,y2,x3,y3); A=acos((b*b+c*c-a*a)/(2*b*c)); B=acos((a*a+c*c-b*b)/(2*a*c)); C=acos((a*a+b*b-c*c)/(2*a*b)); double d=gcd(A,B); d=gcd(d,C); n=pi/d; area=fabs(x2*y3+x3*y1+x1*y2-x3*y2-x1*y3-x2*y1)/2; r=a*b*c/4/area; printf("%.8f\n",(n*r*r/2)*sin(2*pi/n)); return 0; }double edge(double x1,double y1,double x2,double y2) { return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); } double gcd(double x,double y)//这里是一中求浮点型数据的最大公约数的一种方法,比较巧妙,值得学习。 { while(fabs(x)>esp&&fabs(y)>esp) { if(x>y) x-=floor(x/y)*y; else y-=floor(y/x)*x; } return x+y; }
通过过,r=a*b*c/(4*s)求出外接圆的面积,然后通过A=acos((b*b+c*c-a*a)/(2*b*c))求出三角形三个顶角,然后利用求gcd函数求出A,B,C最大公约数,由于三角形每条边所对应的圆周角都是正多边形圆周角的整数倍,故n=pi/gcd(A,B,C),然后正多边形的面积便是n个相同的三角形的面积了,其中每个三角形面积为r*r/2*sin(2*pi/n),正多边形面积即可求出。
相关文章推荐
- CF_1C中关于给定正多边形三点坐标,求满足条件的使得面积最小的正多边形。
- 【Codeforces Round 330 (Div 2)E】【贪心 暴力】Edo and Magnets 给定矩形最多去除m个,最小面积矩形使得覆盖所有小矩形重心
- 【codeforces 691 E】【矩阵快速幂 思维题】【给定序列,从序列中选择k个数(可以重复选择),使得得到的排列满足xi与xi+1异或的二进制表示中1的个数是3的倍数。问满足条件的序列个数】
- 一个关于将满足给定条件的数据按顺序写到另一文件中的C语言函数。
- 关于已知三角形三点坐标求三角形面积
- hdu 3669 Cross the Wall(给你n个矩形,长宽已知,求用不超过k个大矩形包含所有给定矩形,使得大矩形总面积和最小)
- 6-3 判断满足条件的三位数 本题要求实现一个函数,统计给定区间内的三位数中有两位数字相同的完全平方数(如144、676)的个数。
- [gym101047K Training with Phuket's larvae] 给定N条边求能组成三角形的最小面积
- hdu6055 Regular polygon 脑洞几何 给定n个坐标(x,y)。x,y都是整数,求有多少个正多边形。因为点都是整数点,所以只可能是正四边形。
- 2014年去哪儿网笔试题--给定一个整型数组,对这个整型素组排序,使得按序拼接数组各元素得到的值最小。
- 作业 4 函数应用 输出80到120之间的满足给定条件的所有整数,条件为构成该整数的每位数字都相同
- 任意给定一个正整数N,求一个最小的正整数M(M>1),使得N*M的十进制表示形式里只含有1和0。
- HDU BugZhu抽抽抽!! 知道三点坐标,求三角形面积,外接圆面积,半径
- BugZhu抽抽抽!!(已知三角形三点坐标,求外接圆半径及三角面积)
- 给定整数a1、a2、a3、...、an,判断是否可以从中选出若干个数,使得它们的和等于k(k任意给定,且满足-10^8 <= k <= 10^8)。
- ZOJ1032-Area 2(已知点坐标求多边形面积,求线段上的整点数量,pick定理)
- 三点坐标求三角形的面积
- 关于函数可重入需要满足的条件
- 有三个正整数a,b,c(0<a,b,c<10^6),其中c不等于b。若a和c的最大公约数为b,现已知a和b,求满足条件的最小的c。
- 计算几何(知三角形三点坐标,求三角形的面积)