Circle Through Three Points

Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 20000/10000K (Java/Other)
Total Submission(s) : 35   Accepted Submission(s) : 8
Problem Description
Your team is to write a program that, given the Cartesian coordinates of three points on a plane, will find the equation of the circle through them all. The three points will not be on a straight line. 
The solution is to be printed as an equation of the form

	(x - h)^2 + (y - k)^2 = r^2				(1)

and an equation of the form

	x^2 + y^2 + cx + dy - e = 0				(2)
 
Input
Each line of input to your program will contain the x and y coordinates of three points, in the order Ax, Ay, Bx, By, Cx, Cy. These coordinates will be real numbers separated from each other by one or more spaces.
 
Output
Your program must print the required equations on two lines using the format given in the sample below. Your computed values for h, k, r, c, d, and e in Equations 1 and 2 above are to be printed with three digits after the decimal point. Plus and minus signs in the equations should be changed as needed to avoid multiple signs before a number. Plus, minus, and equal signs must be separated from the adjacent characters by a single space on each side. No other spaces are to appear in the equations. Print a single blank line after each equation pair.
 
Sample Input
7.0 -5.0 -1.0 1.0 0.0 -6.0 1.0 7.0 8.0 6.0 7.0 -2.0
 
Sample Output
(x - 3.000)^2 + (y + 2.000)^2 = 5.000^2 x^2 + y^2 - 6.000x + 4.000y - 12.000 = 0 (x - 3.921)^2 + (y - 2.447)^2 = 5.409^2 x^2 + y^2 - 7.842x - 4.895y - 7.895 = 0

题意:给你三个圆上的点,求圆的两种表达式。首先普及知识:

外接圆半径:公式:a/sinA=b/sinB=c/sinC=2R (R就是外接圆半径) 
本题可以这样:①.先利用余弦定理:a^2=b^2+c^2-2bc·cosA 
求出:cosA=(b^2+c^2-a^2)/2bc 在利用公式:sinA^2+cosA^2=1
确定 sinA=根号(1-cosA^2) =根号[(a^2+b^2+c^2)^2-2(a^4+b^4+c^4)]/(2bc) 
然后代入 a/sinA=2R求出R. R=abc/根号[(a^2+b^2+c^2)^2-2(a^4+b^4+c^4)]        
 
定义:设平面上的三点A(x1,y1),B(x2,y2),C(x3,y3),定义 
S(A,B,C) = (x1-x3)*(y2-y3) - (y1-y3)*(x2-x3)

已知三角形的三个顶点为A(x1,y1),B(x2,y2),C(x3,y3),则该三角形的外心为: 
           S((x1*x1+y1*y1, y1), (x2*x2+y2*y2, y2), (x3*x3+y3*y3, y3)) 
x0 = ----------------------------------------------------------- 
                       2*S(A,B,C)

S((x1,x1*x1+y1*y1), (x2, x2*x2+y2*y2), (x3, x3*x3+y3*y3)) 
y0 = ----------------------------------------------------------- 
            2*S(A,B,C)

把圆心的坐标和半径求出来之后就输出。

代码:

#include<iostream>
#include<cmath>
using namespace std;
double Dist(double x,double y,double x1,double y1)
{
return (x-x1)*(x-x1)+(y-y1)*(y-y1);
}
double Sn(double x1,double y1,double x2,double y2,double x3,double y3)
{
return (x1-x3)*(y2-y3)-(y1-y3)*(x2-x3);
}
void Fn(double x)
{
if(x<0) printf(" + %.3lf",-x);
else printf(" - %.3lf",x);
}
int main()
{
double x1,x2,x3,y1,y2,y3,x,y;
while( scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3)!=EOF){
double a=Dist(x1,y1,x2,y2);
double b=Dist(x2,y2,x3,y3);
double c=Dist(x3,y3,x1,y1);
double r=sqrt(a*b*c)/sqrt((a+b+c)*(a+b+c)-2*(a*a+b*b+c*c));
// printf("%.lf\n",r);
double s=Sn(x1,y1,x2,y2,x3,y3);
double s1=Sn( x1*x1+y1*y1, y1, x2*x2+y2*y2, y2, x3*x3+y3*y3, y3);
double s2=Sn( x1,x1*x1+y1*y1, x2, x2*x2+y2*y2, x3, x3*x3+y3*y3);
x=s1/(2*s);
y=s2/(2*s);

printf("(x");
Fn(x);
printf(")^2 + (y");
Fn(y);
printf(")^2 = %.3lf^2\n",r);
printf("x^2 + y^2");
Fn(2*x); printf("x");
Fn(2*y); printf("y");
Fn(r*r-x*x-y*y);
printf(" = 0\n\n");
}
return 0;
}

POJ1329题的更多相关文章

  1. java基础集合经典训练题

    第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...

  2. 【Java每日一题】20170106

    20170105问题解析请点击今日问题下方的"[Java每日一题]20170106"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  3. 【Java每日一题】20170105

    20170104问题解析请点击今日问题下方的"[Java每日一题]20170105"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  4. 【Java每日一题】20170104

    20170103问题解析请点击今日问题下方的"[Java每日一题]20170104"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  5. 【Java每日一题】20170103

    20161230问题解析请点击今日问题下方的"[Java每日一题]20170103"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  6. SQL面试笔试经典题(Part 1)

    本文是在Cat Qi的原贴的基础之上,经本人逐题分别在MySql数据库中实现的笔记,持续更新... 参考原贴:http://www.cnblogs.com/qixuejia/p/3637735.htm ...

  7. 刷LeetCode的正确姿势——第1、125题

    最近刷LeetCode比较频繁,就购买了官方的参考电子书 (CleanCodeHandbook),里面有题目的解析和范例源代码,可以省去非常多寻找免费经验分享内容和整理这些资料的时间.惊喜的是,里面的 ...

  8. AWS的SysOps认证考试样题解析

    刚考过了AWS的developer认证,顺手做了一下SysOps的样题.以下是题目和答案. When working with Amazon RDS, by default AWS is respon ...

  9. AWS开发人员认证考试样题解析

    最近在准备AWS的开发人员考试认证.所以特意做了一下考试样题.每道题尽量给出了文档出处以及解析. Which of the following statements about SQS is true ...

随机推荐

  1. iOS上获得MAC地址

    很多时候我们都需要唯一来确定一台设备,苹果设备本来有个UDID号,可以实现这个目的.在iOS5.0以前,还有一个uniqueIdentifier的API用来获得这个number.不过iOS5之后,这个 ...

  2. SharePoint2010主题和样式揭秘

    转:http://www.cnblogs.com/Ryu666/archive/2011/07/28/2119652.html 好久好久没写技术博客了,差点以为技术已经离我远去.但鱼离不开水,我怎能把 ...

  3. Java C# MD5 加密串一致性

    Java C# MD5 加密串一致性   Java public final static String md5(String s) { char hexDigits[] = { '0', '1',  ...

  4. Android Paint和Color类

    要绘图,首先得调整画笔,待画笔调整好之后,再将图像绘制到画布上,这样才可以显示在手机屏幕上.Android 中的画笔是 Paint类,Paint 中包含了很多方法对其属性进行设置,主要方法如下: se ...

  5. 数学物理学报Offprints and Remuneration

  6. base64dll

    继上次的dll学习后,想开发个软件,连接到百度的云存储服务器,上传文件.发现要算秘钥,在网上找了到了hmac-sha1,base64的源码,发现有些是c++写的,有些是c写的一起写到一个文件里有些麻烦 ...

  7. 【HTML】Beginner8:Table

    1.Table     Abused to lay out pages    The correct use for tables is to do exactly what you would ex ...

  8. JDK1.5新特性(四)……Autoboxing/Unboxing

    援引 Autoboxing/Unboxing - This facility eliminates the drudgery of manual conversion between primitiv ...

  9. oracle 创建索引

    一.索引简介 1.索引相当于目录 2.索引是通过一组排序后的索引键来取代默认的全表扫描检索方式,从而提高检索效率. 3.索引的创建要适度,多了会影响增删改的效率,少了会影响查询的效率,索引最好创建在取 ...

  10. HTTP状态码及其含义 503 500 401 200 301 302

    下表显示了常见的HTTP 1.1状态代码以及它们对应的状态信息和含义. 应当谨慎地使用那些只有HTTP 1.1支持的状态代码,因为许多浏览器还只能够支持HTTP 1.0.如果你使用了HTTP 1.1特 ...