目录

1 问题描述

2 解决方案

 


1 问题描述

问题描述
  为二维空间中的点设计一个结构体,在此基础上为三角形设计一个结构体。分别设计独立的函数计算三角形的周长、面积、中心和重心。输入三个点,输出这三个点构成的三角形的周长、面积、外心和重心。结果保留小数点后2位数字。
样例输出
与上面的样例输入对应的输出。
例:
数据规模和约定
  输入数据中每一个数的范围。
  例: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)的更多相关文章

  1. 算法笔记_083:蓝桥杯练习 合并石子(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 在一条直线上有n堆石子,每堆有一定的数量,每次可以将两堆相邻的石子合并,合并后放在两堆的中间位置,合并的费用为两堆石子的总数.求把所有石子 ...

  2. 算法笔记_076:蓝桥杯练习 结点选择(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 有一棵 n 个节点的树,树上每个节点都有一个正整数权值.如果一个点被选择了,那么在树上和它相邻的点都不能被选择.求选出的点的权值和最大是多 ...

  3. 算法笔记_075:蓝桥杯练习 最短路(Java)

    目录 1 问题描述 2 解决方案 2.1 floyd算法解决 2.2 spfa算法解决   1 问题描述 问题描述 给定一个n个顶点,m条边的有向图(其中某些边权可能为负,但保证没有负环).请你计算从 ...

  4. 算法笔记_064:蓝桥杯练习 操作格子(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 有n个格子,从左到右放成一排,编号为1-n. 共有m次操作,有3种操作类型: 1.修改一个格子的权值, 2.求连续一段格子权值和, 3.求 ...

  5. 算法笔记_094:蓝桥杯练习 矩阵相乘(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 小明最近在为线性代数而头疼,线性代数确实很抽象(也很无聊),可惜他的老师正在讲这矩阵乘法这一段内容. 当然,小明上课打瞌睡也没问题,但线性 ...

  6. 算法笔记_088:蓝桥杯练习 8-1因式分解(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 设计算法,用户输入合数,程序输出若个素数的乘积.例如,输入6,输出2*3.输入20,输出2*2*5. 样例 与上面的样例输入对应的输出. ...

  7. 算法笔记_095:蓝桥杯练习 拿糖果(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 妈妈给小B买了N块糖!但是她不允许小B直接吃掉. 假设当前有M块糖,小B每次可以拿P块糖,其中P是M的一个不大于根号下M的质因数.这时,妈 ...

  8. 算法笔记_087:蓝桥杯练习 9-1九宫格(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 九宫格.输入1-9这9个数字的一种任意排序,构成3*3二维数组.如果每行.每列以及对角线之和都相等,打印1.否则打印0. 样例输出 与上面 ...

  9. 算法笔记_080:蓝桥杯练习 队列操作(Java)

    目录 1 问题描述 2 解决方案 1 问题描述 问题描述 队列操作题.根据输入的操作命令,操作队列(1)入队.(2)出队并输出.(3)计算队中元素个数并输出. 输入格式 第一行一个数字N. 下面N行, ...

随机推荐

  1. 2017CCPC 杭州 J. Master of GCD【差分标记/线段树/GCD】

    给你一个n个初始元素都为1的序列和m个询问q. 询问格式为:l r x(x为2or3) 最后求1~n所有数的GCD GCD:把每个数分别分解质因数,再把各数中的全部公有质因数提取出来连乘,所得的积就是 ...

  2. 洛谷P2874 [USACO07FEB]新牛棚Building A New Barn [贪心]

    题目传送门 题目描述 After scrimping and saving for years, Farmer John has decided to build a new barn. He wan ...

  3. 51使用while进行延时的问题

    上周写了一个简单的IO口翻转的程序,但是很奇怪,在FPGA板子上怎么也跑不起来. 后面发现问题可能出在延时函数上. void Delay(unsigned char t) { while(--t); ...

  4. 并发系列4-大白话聊聊Java并发面试问题之公平锁与非公平锁是啥?【石杉的架构笔记】

  5. Python开发基础-Day9-生成器、三元表达式、列表生成式、生成器表达式

    生成器 生成器函数:函数体内包含有yield关键字,该函数执行的结果是生成器,生成器在本质上就是迭代器. def foo(): print('first------>') yield 1 pri ...

  6. Struts2与Servlet之间的关系

    在struts2.0中,可以通过ServletActionContext.getRequest()获取request对象. 在action的方法中return一个字符串,该字符串对应struts.xm ...

  7. [2018湖南省队集训] 6.28 T2 color

    毒瘤计数题2333,(小声)k其实可以出到1e9,不过这样求组合数的时候就要记1000种数的1~1000次下降幂(用到的组合数中第一维在1e9级别的只有1000种左右,第二维都是<=1000), ...

  8. python基础之递归,匿名,内置函数

    递归函数: 什么是递归函数? 函数递归调用:在调用一个函数的过程中,又直接或间接地调用了该函数本身. 递归必须要有两个明确的阶段: ①递推:一层一层递归调用下去,强调:每进入下一层问题规模减少 ②回溯 ...

  9. [典型漏洞分享]YS的防暴力破解设计存在缺陷

    YS使用的防暴力破解机制存在缺陷,该缺陷可被用于暴力破解其它用户密码[高] 问题描述: YS在用户登录页面设置了验证码机制,当用户输入密码错误次数达到3次时,再次登录需要验证码以防止攻击者进行暴力破解 ...

  10. Word中将图表变为表格

    一定要先拷贝了图表,否则第二张图片没那个像是,只有最后一个,这样的做的目的是减少查重. 还有就是把部分文字放入Mathtype,查不出来.