Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1992 Accepted Submission(s): 721
题意:
一个以原点为中心的圆,告诉你圆上的一个点,求与另外的两个点组成的三角形的周长最长的两点作标。
思路:
设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
#include
#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;
}