算法笔记_082:蓝桥杯练习 12-1三角形(Java)
目录
1 问题描述
例:
例:doule型表示数据。
2 解决方案
本题主要考查三角形相关数学知识,刚开始做的时候,我对重心和外心的计算公式一点都记不起来,无语中...,后来,计算外心的时候,也出错,因为没有单独划分出横坐标相等的情况,导致计算出错。

具体代码如下:
import java.util.Scanner;
public class Main {
    //计算三角形三条边的长
    public double[] getABC(double[][] point) {
        double[] edge = new double[3];
        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];
        edge[0] = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);
        edge[0] = Math.sqrt(edge[0]);
        edge[1] = (x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3);
        edge[1] = Math.sqrt(edge[1]);
        edge[2] = (x2 - x3) * (x2 - x3) + (y2 - y3) * (y2 - y3);
        edge[2] = Math.sqrt(edge[2]);
        return edge;
    }
    //计算三角形的周长
    public double getL(double[][] point) {
        double[] edge = getABC(point);
        return edge[0] + edge[1] + edge[2];
    }
    //计算三角形的面积
    public double getS(double[][] point) {
        double[] edge = getABC(point);
        double p = (edge[0] + edge[1] + edge[2]) / 2;
        double S = p * (p - edge[0]) * (p - edge[1]) * (p - edge[2]);  //海伦公式
        S = Math.sqrt(S);
        return S;
    }
    //计算三角形的外心(PS:三角形外接圆的圆心,外心到三个顶点距离相等)
    public double[] getExcenter(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];
        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;
    }
    //计算三角形的重心(PS:三角形中三条边的中线交点)
    public 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;
    }
    //输出题意结果
    public void printResult(double[][] point) {
        double L = getL(point);
        double S = getS(point);
        double[] exCenter = getExcenter(point);
        double[] baryCenter = getBarycenter(point);
        System.out.printf("%.2f\n",L);
        System.out.printf("%.2f\n",S);
        System.out.printf("%.2f",exCenter[0]);
        System.out.printf(" %.2f\n",exCenter[1]);
        System.out.printf("%.2f",baryCenter[0]);
        System.out.printf(" %.2f\n",baryCenter[1]);
    }
    public static void main(String[] args) {
        Main test = new Main();
        Scanner in = new Scanner(System.in);
        double[][] point = new double[3][2];
        for(int i = 0;i < 3;i++) {
            point[i][0] = in.nextDouble();
            point[i][1] = in.nextDouble();
        }
        test.printResult(point);
    }
}
算法笔记_082:蓝桥杯练习 12-1三角形(Java)的更多相关文章
- 算法笔记_083:蓝桥杯练习 合并石子(Java)
		目录 1 问题描述 2 解决方案 1 问题描述 问题描述 在一条直线上有n堆石子,每堆有一定的数量,每次可以将两堆相邻的石子合并,合并后放在两堆的中间位置,合并的费用为两堆石子的总数.求把所有石子 ... 
- 算法笔记_076:蓝桥杯练习 结点选择(Java)
		目录 1 问题描述 2 解决方案 1 问题描述 问题描述 有一棵 n 个节点的树,树上每个节点都有一个正整数权值.如果一个点被选择了,那么在树上和它相邻的点都不能被选择.求选出的点的权值和最大是多 ... 
- 算法笔记_075:蓝桥杯练习 最短路(Java)
		目录 1 问题描述 2 解决方案 2.1 floyd算法解决 2.2 spfa算法解决 1 问题描述 问题描述 给定一个n个顶点,m条边的有向图(其中某些边权可能为负,但保证没有负环).请你计算从 ... 
- 算法笔记_064:蓝桥杯练习 操作格子(Java)
		目录 1 问题描述 2 解决方案 1 问题描述 问题描述 有n个格子,从左到右放成一排,编号为1-n. 共有m次操作,有3种操作类型: 1.修改一个格子的权值, 2.求连续一段格子权值和, 3.求 ... 
- 算法笔记_094:蓝桥杯练习 矩阵相乘(Java)
		目录 1 问题描述 2 解决方案 1 问题描述 问题描述 小明最近在为线性代数而头疼,线性代数确实很抽象(也很无聊),可惜他的老师正在讲这矩阵乘法这一段内容. 当然,小明上课打瞌睡也没问题,但线性 ... 
- 算法笔记_088:蓝桥杯练习 8-1因式分解(Java)
		目录 1 问题描述 2 解决方案 1 问题描述 问题描述 设计算法,用户输入合数,程序输出若个素数的乘积.例如,输入6,输出2*3.输入20,输出2*2*5. 样例 与上面的样例输入对应的输出. ... 
- 算法笔记_095:蓝桥杯练习 拿糖果(Java)
		目录 1 问题描述 2 解决方案 1 问题描述 问题描述 妈妈给小B买了N块糖!但是她不允许小B直接吃掉. 假设当前有M块糖,小B每次可以拿P块糖,其中P是M的一个不大于根号下M的质因数.这时,妈 ... 
- 算法笔记_087:蓝桥杯练习  9-1九宫格(Java)
		目录 1 问题描述 2 解决方案 1 问题描述 问题描述 九宫格.输入1-9这9个数字的一种任意排序,构成3*3二维数组.如果每行.每列以及对角线之和都相等,打印1.否则打印0. 样例输出 与上面 ... 
- 算法笔记_080:蓝桥杯练习 队列操作(Java)
		目录 1 问题描述 2 解决方案 1 问题描述 问题描述 队列操作题.根据输入的操作命令,操作队列(1)入队.(2)出队并输出.(3)计算队中元素个数并输出. 输入格式 第一行一个数字N. 下面N行, ... 
随机推荐
- ZOJ 3872 Beauty of Array【无重复连续子序列的贡献和/规律/DP】
			Edward has an array A with N integers. He defines the beauty of an array as the summation of all dis ... 
- HDU 5552 Bus Routes(2015合肥现场赛A,计数,分治NTT)
			题意 给定n个点,任意两点之间可以不连边也可以连边.如果连边的话可以染上m种颜色. 求最后形成的图,是一个带环连通图的方案数. 首先答案是n个点的图减去n个点能形成的树. n个点能形成的树的方案数比 ... 
- JAX-WS文章汇总
			学习路线图 传送门 最简单的Web Service实现- 这里提供一个最简单的Web Service的实现,基于JAX-WS.除了jdk不需要任何其他jar包,使用Eclipse提供的Web Serv ... 
- Flask实战第68天:项目上线部署
			在开发机上的准备工作 1.确认项目没有bug 2.用pip freeze >requirements.txt将当前环境的包导出到requirements.txt文件中,方便部署的时候安装 3.将 ... 
- What does a (+) sign mean in an Oracle SQL WHERE clause?
			This is an Oracle-specific notation for an outer join. It means that it will include all rows from t ... 
- wannafly挑战赛14
			第一次打wannafly..觉得自己好菜啊... 题目描述 在三维空间中,平面 x = 0, y = 0, z = 0,以及平面 x + y + z = K 围成了一个三棱锥. 整天与整数打交道的小明 ... 
- 【树形dp】Treasure Hunt I
			[ZOJ3626]Treasure Hunt I Time Limit: 2 Seconds Memory Limit: 65536 KB Akiba is a dangerous coun ... 
- BZOJ 2073 [POI2004]PRZ(状压DP)
			[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2073 [题目大意] 任何时候队伍在桥上的人都不能超过一定的限制. 所以这只队伍过桥时只 ... 
- BZOJ 1221 [HNOI2001] 软件开发(费用流)
			[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1221 [题目大意] 每天对毛巾都有一定的需求ni,每天可以花f价值每条购买毛巾, 当天 ... 
- 实验四实验报告————Android基础开发
			实验四实验报告----Android基础开发 任务一 关于R类 关于apk文件 实验成果 任务二 活动声明周期 实验成果 任务三 关于PendingIntent类 实验成果 任务四 关于布局 实验成果 ... 
