算法提高 12-1三角形
2018-02-10 23:25
260 查看
问题描述
为二维空间中的点设计一个结构体,在此基础上为三角形设计一个结构体。分别设计独立的函数计算三角形的周长、面积、中心和重心。输入三个点,输出这三个点构成的三角形的周长、面积、外心和重心。结果保留小数点后2位数字。
样例输出
与上面的样例输入对应的输出。
例:
数据规模和约定
输入数据中每一个数的范围。
例:doule型表示数据。
给定三角形三个顶点的坐标,如何求三角形的外心的坐标呢?
例如 :给定a(x1,y1) b(x2,y2) c(x3,y3)求外接圆心坐标O(x,y)
1.首先,外接圆的圆心是三角形三条边的垂直平分线的交点,我们根据圆心到顶点的距离相等,可以列以下方程
2化简得到
3.最后根据克拉默法则:
因此,x,y为最终结果;
代码如下:
为二维空间中的点设计一个结构体,在此基础上为三角形设计一个结构体。分别设计独立的函数计算三角形的周长、面积、中心和重心。输入三个点,输出这三个点构成的三角形的周长、面积、外心和重心。结果保留小数点后2位数字。
样例输出
与上面的样例输入对应的输出。
例:
数据规模和约定
输入数据中每一个数的范围。
例:doule型表示数据。
给定三角形三个顶点的坐标,如何求三角形的外心的坐标呢?
例如 :给定a(x1,y1) b(x2,y2) c(x3,y3)求外接圆心坐标O(x,y)
1.首先,外接圆的圆心是三角形三条边的垂直平分线的交点,我们根据圆心到顶点的距离相等,可以列以下方程
(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化简得到
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;
3.最后根据克拉默法则:
x=((C1*B2)-(C2*B1))/((A1*B2)-(A2*B1)); y=((A1*C2)-(A2*C1))/((A1*B2)-(A2*B1));
因此,x,y为最终结果;
代码如下:
package ADV_230; import java.util.Scanner; public class Main { //求三角形的周长 public static double perimeter(int x[],int y[]){ //求三角形的三边长,求和 double a=(x[1]-x[2])*(x[1]-x[2])+(y[1]-y[2])*(y[1]-y[2]); double b=(x[2]-x[3])*(x[2]-x[3])+(y[2]-y[3])*(y[2]-y[3]); double c=(x[3]-x[1])*(x[3]-x[1])+(y[3]-y[1])*(y[3]-y[1]); double perimeter=Math.sqrt(a)+Math.sqrt(b)+Math.sqrt(c); return perimeter; } //求三角形的面积 public static bd3b double area(int x[],int y[]){ //求出三边长, double a=(x[1]-x[2])*(x[1]-x[2])+(y[1]-y[2])*(y[1]-y[2]); double b=(x[2]-x[3])*(x[2]-x[3])+(y[2]-y[3])*(y[2]-y[3]); double c=(x[3]-x[1])*(x[3]-x[1])+(y[3]-y[1])*(y[3]-y[1]); a=Math.sqrt(a); b=Math.sqrt(b); c=Math.sqrt(c); //求出周长的一般后,再利用公式求面积 double p=(a+b+c)/2; double area=Math.sqrt(p*(p-a)*(p-b)*(p-c)); return area; } //求三角形的外心坐标 public static void wx(int x[],int y[],double a[]){ double a1=2*(x[2]-x[1]); double b1=2*(y[2]-y[1]); double c1=(x[2]*x[2]+y[2]*y[2]-x[1]*x[1]-y[1]*y[1]); double a2=2*(x[3]-x[2]); double b2=2*(y[3]-y[2]); double c2=(x[3]*x[3]+y[3]*y[3]-x[2]*x[2]-y[2]*y[2]); a[0]=(c1*b2-c2*b1)/(a1*b2-a2*b1); a[1]=(a1*c2-a2*c1)/(a1*b2-a2*b1); } //求三角形的重心坐标 public static void zx(int x[],int y[],double a[]){ a[0]=(x[1]+x[2]+x[3])*1.0/3; a[1]=(y[1]+y[2]+y[3])*1.0/3; } public static void main(String[] args) { int x[]=new int[4]; int y[]=new int[4]; Scanner cin=new Scanner(System.in); for(int i=1;i<=3;i++) { x[i]=cin.nextInt(); y[i]=cin.nextInt(); } System.out.println(String.format("%.2f",perimeter(x,y))); System.out.println(String.format("%.2f",area(x,y))); double a[]=new double[2]; wx(x,y,a); System.out.print(String.format("%.2f",a[0])+" "); System.out.println(String.format("%.2f",a[1])); zx(x,y,a); System.out.print(String.format("%.2f",a[0])+" "); System.out.println``` (String.format("%.2f",a[1])); } }
相关文章推荐
- 蓝桥杯算法提高 12-1三角形
- 算法提高 12-1三角形
- 算法提高 12-1三角形
- 算法提高 12-1三角形
- 算法提高 12-1三角形
- 算法提高 12-1三角形
- 蓝桥杯 算法提高 12-1三角形 (Java解题)
- 算法提高 12-1三角形
- 算法提高 ADV-230 12-1三角形
- 算法提高 12-1三角形
- 算法提高 12-1三角形 外心坐标
- 蓝桥杯 算法提高 12-1三角形 【计算几何_三角形】【全是板子】
- 蓝桥 ADV-230 算法提高 12-1三角形 【数学公式】
- ADV-84-算法提高-图形输出、ADV-88-算法提高-输出正反三角形
- 算法提高 三角形面积
- 算法提高 ADV-231 12-2扑克排序
- 算法提高 12-2扑克排序
- 算法提高 12-2扑克排序
- 算法提高 12-2扑克排序
- 蓝桥杯 算法提高 12-2扑克排序