Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1992 Accepted Submission(s): 721
2 1.500 2.000 563.585 1.251
0.982 -2.299 -2.482 0.299 -280.709 -488.704 -282.876 487.453
题意:
一个以原点为中心的圆,告诉你圆上的一个点,求与另外的两个点组成的三角形的周长最长的两点作标。
思路:
设P(x,y),一个方程是pow(x,2)+pow(y,2)=pow(r,2);另一个方程是根据向量知识,向量的夹角公式得到方程。
因为圆心角夹角为120度,已知一个向量(即一个点作标),所以COS(2PI/3)=a*b/|a|*|b|;(a,b为向量);
已知角和a向量,就可求b向量b(x,y).由方程组可求得(x,y);最后得到的是一元二次方程组,可得到两个解,即为两个点的作标。
代码:
#include <stdio.h> #include <math.h> #define PI 3.1415926 int main() { double x,y,x1,y1,x2,y2,cosx,a,b,c,r,delta; int t; scanf("%d",&t); while(t--) { scanf("%lf%lf",&x,&y); r=sqrt(x*x+y*y); a=r*r; b=r*r*y; c=r*r*r*r/4-x*x*r*r; delta=b*b-4*a*c; y1=(-1*b-sqrt(delta))/(2*a); y2=(-1*b+sqrt(delta))/(2*a); if(x==0) { x1=-sqrt(r*r-y1*y1); x2=sqrt(r*r-y2*y2); } else { x1=(-1*r*r/2-y*y1)/x; x2=(-1*r*r/2-y*y2)/x; } printf("%.3lf %.3lf %.3lf %.3lf/n",x1,y1,x2,y2); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
hdu 1700 Points on Cycle(几何)(中等)
原文地址:http://blog.csdn.net/kaisa158/article/details/47281089