*8.33(几何:多边形的子面积)一个具有四个顶点的凸多边形被分为4个三角形,编写一个程序,提示用户输入4个顶点的坐标,然后以升序显示四个三角形的面积

  • 题目
    • 题目描述与运行示例
    • 破题
  • 代码

题目

题目描述与运行示例

8.33(几何:多边形的子面积)一个具有四个顶点的凸多边形被分为4个三角形,编写一个程序,提示用户输入4个顶点的坐标,然后以升序显示四个三角形的面积

博主补充:
a00 * x + a01 * y = b0
a10 * x + a11 * y = b1
则:
x = (b0 * a11 - b1 * a01) / (a00 * a11 - a01 * a10)
y = (b1 * a00 - b0 * a10) / (a00 * a11 - a01 * a10)
三角形面积公式:
s = (side1 + side2 + side3) / 2
area = Math.sqrt(s
(s-side1)(s-side2)(s-side3))
运行示例:

Enter x1, y1, x2, y2, x3, y3, x4, y4:
-2.5 2 4 4 3 -2 -2 -3.5
The areas are 6.17 7.96 8.08 10.42

破题

  1. 获取四个点的坐标,使用数组读入
  2. 求v1v3和v2v4线的交点坐标
  3. 自定义方法求三角形面积(传入数组、下标1、下标2、交点坐标数组),使用数组接收
  4. 对数组排序,输出

代码

import java.util.Arrays;
import java.util.Scanner;public class Test8_33 {public static void main(String[] args) {//1. 获取四个点的坐标,使用数组读入double[][] array = new double[4][2];Scanner input = new Scanner(System.in);System.out.println("Enter x1, y1, x2, y2, x3, y3, x4, y4:");for (int i = 0 ; i < 4 ; i++){for (int j = 0 ; j < 2 ; j++){array[i][j] = input.nextDouble();}}//2. 求v1v3和v2v4线的交点坐标double[] loc = intersection(array);//3. 自定义方法求三角形面积(传入数组、下标、交点坐标数组),使用数组接收double[] area = new double[4];for (int i = 0 ; i < 4 ; i++){area[i] = triangle(array, i, loc);}//4. 对数组排序,输出Arrays.sort(area);System.out.print("The areas are ");for (int i = 0 ; i < 4 ; i++){System.out.printf("%.2f ", area[i]);}}/** 求v1v3和v2v4线的交点坐标 */public static double[] intersection(double[][] arr){double k02 = (arr[2][1] -arr[0][1]) / (arr[2][0] - arr[0][0]);double k13 = (arr[3][1] -arr[1][1]) / (arr[3][0] - arr[1][0]);double b02 = arr[0][1] - k02 * arr[0][0];double b13 = arr[1][1] - k13 * arr[1][0];double x = (b02 - b13) / (k13 - k02);double y = (b02 * k13 - b13 * k02) / (k13 - k02);double[] feedback = {x, y};return feedback;}/** 求三角形面积 */public static double triangle(double[][] arr0, int index0, double[] arr1){int index1 = (index0 + 1) % 4;double side1 = Math.sqrt(Math.pow(arr0[index1][0] - arr0[index0][0], 2) + Math.pow(arr0[index1][1] - arr0[index0][1], 2));double side2 = Math.sqrt(Math.pow(arr1[0] - arr0[index0][0], 2) + Math.pow(arr1[1] - arr0[index0][1], 2));double side3 = Math.sqrt(Math.pow(arr1[0] - arr0[index1][0], 2) + Math.pow(arr1[1] - arr0[index1][1], 2));double s = (side1 + side2 + side3) / 2;return Math.sqrt(s*(s-side1)*(s-side2)*(s-side3));}
}

Java黑皮书课后题第8章:*8.33(几何:多边形的子面积)一个具有四个顶点的凸多边形被分为4个三角形,编写一个程序,提示用户输入4个顶点的坐标,然后以升序显示四个三角形的面积相关推荐

  1. Java黑皮书课后题第5章:*5.14(计算最大公约数)下面是求两个整数n1和n2的最大公约数的程序清单5-9的另一种解法:...提示用户输入两个正整数,然后显示最大公约数

    *5.14(计算最大公约数)下面是求两个整数n1和n2的最大公约数的程序清单5-9的另一种解法:首先找出n1和n2的最小值d,然后一次检验d.d-1.d-2....2.1,是否是n1和n2的公约数.第 ...

  2. Java黑皮书课后题第4章:*4.15(电话键盘)电话上的国际标准字母/数字映射如下所示。编写程序,提示用户输入一个小写或大写字母,然后显示对应数字。对于非字母输入,提示非法输入

    *4.15(电话键盘)电话上的国际标准字母/数字映射如下所示.编写程序,提示用户输入一个小写或大写字母,然后显示对应数字.对于非字母输入,提示非法输入 题目 题目概述 运行示例 破题 代码 题目 题目 ...

  3. Java黑皮书课后题第8章:8.9(井字游戏)玩家使用各自标志标记3*3网格中的某个空格,当一个玩家在网格的水平、垂直或对角线方向标记了三个相同的标记时,游戏结束,该玩家获胜。创建一个玩井字游戏的程序

    ***8.9(井字游戏)玩家使用各自标志标记3*3网格中的某个空格,当一个玩家在网格的水平.垂直或对角线方向标记了三个相同的标记时,游戏结束,该玩家获胜.创建一个玩井字游戏的程序 题目 题目描述与运行 ...

  4. Java黑皮书课后题第6章:*6.5(对三个数排序)使用下面的方法头编写方法,按升序显示三个数

    *6.5(对三个数排序)使用下面的方法头编写方法,按升序显示三个数 题目 题目概述 破题 代码:排序 运行结果 题目 题目概述 *6.5(对三个数排序)使用下面的方法头编写方法,按升序显示三个数: p ...

  5. Java黑皮书课后题第11章:11.2(Person Student Employee Faculty Staff类)设计一个名为Person的类及其两个名为Student和Employee的子类

    Java黑皮书课后题第11章:11.2(Person Student Employee Faculty Staff类) 题目 缺陷 UML图 代码 Test02_MyDate.java:用于参考的My ...

  6. Java黑皮书课后题第10章:**10.25(新的字符串split方法)String类中的split方法会返回一个字符串数组,该数组是由分隔符分隔开的子串构成的

    Java黑皮书课后题第10章:**10.25(新的字符串split方法) 题目 代码 运行实例 题目 代码 public class Test25 {public static String[] sp ...

  7. Java黑皮书课后题第10章:10.21(被5或6整除)找出能被5或6整除的大于Long.MAX_VALUE的前10个数字

    Java黑皮书课后题第10章:10.21(被5或6整除)找出能被5或6整除的大于Long.MAX_VALUE的前10个数字 题目 代码 结果 题目 都在上面 代码 import java.math.B ...

  8. Java黑皮书课后题第10章:*10.13(几何:MyRectangle2D类)定义MyRectangle2D类

    Java黑皮书课后题第10章:10.3 题目 程序 代码 Test13.java Test13_MyRectangle2D.java 运行 UML 题目 程序 Test13.java:测试程序 Tes ...

  9. Java黑皮书课后题第10章:10.2(BMI类)将下面的新构造方法加入BMI类中

    Java黑皮书课后题第10章:10.2(BMI类)将下面的新构造方法加入BMI类中 题目 程序说明 题目槽点 代码:Test2_BMI.java 运行实例 题目 程序说明 Test2_BMI.java ...

  10. Java黑皮书课后题第10章:*10.1(Time类)设计一个名为Time的类。编写一个测试程序,创建两个Time对象(使用new Time()和new Time(555550000))

    Java黑皮书课后题第10章:*10.1设计一个名为Time的类.编写一个测试程序,创建两个Time对象 题目 程序 代码 Test1.java Test1_Time.java 运行结果 UML 题目 ...

最新文章

  1. python web为什么不火-pythonweb为什么不火-问答-阿里云开发者社区-阿里云
  2. matlab 计算大型距离方阵,distance matrix
  3. 【转载】jvm内存回收
  4. 趁老王不在,和隔壁邻居斗斗地主,比比大小
  5. JTAG to AXI Master的API函数读写操作
  6. pip cmd下载速度慢解决方案
  7. 最简洁的秒杀 阿里月饼 js脚本
  8. 阿里云注册域名,购买云服务器,备案,域名解析教程
  9. element 如何使用自定义icon图标
  10. cypress初识--看完就可以写一个简单web自动化脚本了!
  11. html自定义图例,自定义 highcharts 图例之 symbol
  12. word尝试打开文件时遇到错误 解决方法
  13. springmvc自定义参数解析器
  14. 删除docker container
  15. 华顺信安 白帽汇安全研究院一面复盘
  16. 忘了密码?如何查看搜狗浏览器中账号助手中的密码
  17. 深耕硬科技,香港科大百万创赛与八大投资机构签署合作意向
  18. devops之gcp core infrastructure fundamental, 存储
  19. 【TWS API使用教程3】---如何使用TWS API从盈透证券中设置contract及获取contract的信息?
  20. LeetCode报错: “runtime error: member access within null pointer of type ‘struct ListNode”

热门文章

  1. pro缺点和不足 一加7t_2021年元旦有哪些一加手机值得购买?
  2. php loop 语法,Loop - SegmentFault 思否
  3. 试验设计与matlab数据分析 下载,试验设计与MATLAB数据分析(附光盘)
  4. ACL 2018 收录论文 | 如何高效提炼有效信息?
  5. 三招助你轻松搞定超Diao氛围
  6. 面试官:说说一条查询SQL的执行过程?
  7. 当Project xCloud落地移动终端,云游戏靠手游撑起“当打之年”?
  8. linux配置本地yum源 centos7.9为例
  9. MySQL索引类型 btree索引和hash索引的区别
  10. 20180826(01)-Java数据结构