算法提高 ADV-230 12-1三角形
2017-09-20 23:33
232 查看
问题描述
为二维空间中的点设计一个结构体,在此基础上为三角形设计一个结构体。分别设计独立的函数计算三角形的周长、面积、中心和重心。输入三个点,输出这三个点构成的三角形的周长、面积、外心和重心。结果保留小数点后2位数字。
样例输出
与上面的样例输入对应的输出。
例:
数据规模和约定
输入数据中每一个数的范围。
例:doule型表示数据。
为二维空间中的点设计一个结构体,在此基础上为三角形设计一个结构体。分别设计独立的函数计算三角形的周长、面积、中心和重心。输入三个点,输出这三个点构成的三角形的周长、面积、外心和重心。结果保留小数点后2位数字。
样例输出
与上面的样例输入对应的输出。
例:
数据规模和约定
输入数据中每一个数的范围。
例:doule型表示数据。
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); double [][] triangle = new double[3][2]; for (int i = 0; i < triangle.length; i++) { triangle[i][0] = scanner.nextDouble(); triangle[i][1] = scanner.nextDouble(); } double perimeter = getPerimeter(triangle); double acreage = getAcreage(triangle); double[] excenter = getExcenter(triangle); double[] barycenter = getBarycenter(triangle); System.out.format("%.2f\n", perimeter ); System.out.format("%.2f\n", acreage); System.out.format("%.2f", excenter[0]); System.out.format(" %.2f\n", excenter[1]); System.out.format("%.2f", barycenter[0]); System.out.format(" %.2f\n", barycenter[1]); } /** * 计算三角形的面积 * @param triangle * @return */ private static double getAcreage(double[][] triangle) { double [] edge = getABC( triangle ); double p = (edge[0] + edge[1] + edge[2]) / 2; double acreage = Math.sqrt( /*海伦公式 begin */ p * (p-edge[0]) * (p-edge[1]) * (p-edge[2]) /*海伦公式 end */); return acreage; } /** * 计算三角形的重心(PS:三角形中三条边的中线交点) * @param point * @return */ public static double[] getBarycenter(double[][] point) { double[] center = new double[2]; double x1 = point[0][0], y1 = point[0][1]; double x2 = point[1][0], y2 = point[1][1]; double x3 = point[2][0], y3 = point[2][1]; center[0] = (x1 + x2 + x3) / 3; //重心的横坐标 center[1] = (y1 + y2 + y3) / 3; //重心的纵坐标 return center; } /** * 计算三角形的周长 * @param triangle * @return */ priv a577 ate static double getPerimeter(double[][] triangle) { double result = 0; double [] edge = getABC( triangle ); for (int i = 0; i < edge.length; i++) { result += edge[i]; } return result; } /** * 计算三角形三条边的边长 * @param triangle * @return */ public static double[] getABC(double[][] triangle){ double [] edge = new double[3]; double x1 = triangle[0][0]; double y1 = triangle[0][1]; double x2 = triangle[1][0]; double y2 = triangle[1][1]; double x3 = triangle[2][0]; double y3 = triangle[2][1]; edge[0] = getSqrt(x1,x2,y1,y2); edge[1] = getSqrt(x1, x3, y1, y3); edge[2] = getSqrt(x2, x3, y2, y3); return edge; } //计算三角形的外心(PS:三角形外接圆的圆心,外心到三个顶点距离相等) public static double[] getExcenter(double[][] triangle) { double[] center = new double[2]; double x1 = triangle[0][0], y1 = triangle[0][1]; double x2 = triangle[1][0], y2 = triangle[1][1]; double x3 = triangle[2][0], y3 = triangle[2][1]; double a , b , c , d ; a = (x1*x1 + y1*y1 - x2*x2 - y2*y2) * (x1 - x3) / 2; b = (x1*x1 + y1*y1 - x3*x3 - y3* y3) * (x1 - x2) / 2; c = (y1 - y2) * (x1 - x3); d = (y1 - y3) * (x1 - x2); center[1] = (a - b) / (c - d); //外心的纵坐标 double e, f; if(x1 != x2) { //防止出现两点的横坐标相等的情况 e = (x1*x1 + y1*y1 - x2*x2 - y2*y2) / (2 * (x1 - x2)); f = (y1 - y2) / (x1 - x2); center[0] = e - f * center[1]; //外心的横坐标 } else if(x1 != x3) { e = (x1*x1 + y1*y1 - x3*x3 - y3*y3) / (2 * (x1 - x3)); f = (y1 - y3) / (x1 - x3); center[0] = e - f * center[1]; } else if(x2 != x3) { e = (x2*x2 + y2*y2 - x3*x3 - y3*y3) / (2 * (x2 - x3)); f = (y2 - y3) / (x2 - x3); center[0] = e - f * center[1]; } return center; } /** * 求单条边的边长 * @param x1 * @param x2 * @param y1 * @param y2 * @return */ private static double getSqrt(double x1, double x2, double y1, double y2) { double squareNum = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2); return Math.sqrt(squareNum); } }
相关文章推荐
- 蓝桥 ADV-230 算法提高 12-1三角形 【数学公式】
- 蓝桥杯 ADV-135 算法提高 三角形面积
- 算法提高 12-1三角形
- 算法提高 ADV-135 三角形面积
- 蓝桥杯算法提高 12-1三角形
- 蓝桥杯 算法提高 12-1三角形 (Java解题)
- 算法提高 12-1三角形
- 蓝桥杯 算法提高 12-1三角形 【计算几何_三角形】【全是板子】
- 算法提高 ADV-231 12-2扑克排序
- 蓝桥杯ADV-88——算法提高 输出正反三角形
- 算法提高 12-1三角形
- 算法提高 12-1三角形
- 算法提高 12-1三角形
- 算法提高 12-1三角形
- 算法提高 ADV-88 输出正反三角形
- 算法提高 12-1三角形
- 算法提高 12-1三角形 外心坐标
- 蓝桥杯 ADV-88 算法提高 输出正反三角形
- 算法提高 12-1三角形
- ADV-84-算法提高-图形输出、ADV-88-算法提高-输出正反三角形