*8.31(几何:交点)编写一个方法,返回两条直线的交点。四个点存放在4*2的二维数组points中。编写一个程序,提示用户输入4个点,并显示交点

  • 题目
    • 题目描述
    • 破题
  • 代码
    • 本题运行实例

题目

题目描述

*8.31(几何:交点)编写一个方法,返回两条直线的交点。
假设(x1,y1)和(x2,y2)在直线1上,(x3,y3)和(x4,y4)在直线2上
方法头为:
public static double[] getIntersectingPoint(double[][] points)
四个点存放在4*2的二维数组points中,方法返回交点或null(平行)
编写一个程序,提示用户输入4个点,并显示交点

课本提示:
两条直线的交点可以使用编程练习题3.25(点击直达)的公式求得

ax+by=e
cx+dy=f
x = (e * d - b * f)  /  (a * d - b * c)
y = (a * f - e * c)  /  (a * d - b * c)

运行示例也要参见3.25

破题

  1. 主方法:声明一个4*2的二维数组
  2. 主方法:输出提示用户赋值的语句,并使用循环接收值
  3. 主方法:声明一个长度为2的一维数组
  4. 主方法:调用方法getIntersectingPoint,使用刚刚声明的一维数组接收方法返回值
  5. 主方法:输出坐标,以如下格式输出:The intersecting point is at (2.88889, 1,1111)
  6. 方法getIntersectingPoint:创建如下6个double数字a b c d e f,b和d初始值设置为1(a=-k1 b=1 c=-k2 d=1 e=b1 f=b2 )
  7. 方法getIntersectingPoint:对数组四个元素进行遍历,计算两个直线的斜率与截距(分别赋值给-a -c e f)
  8. 方法getIntersectingPoint:声明一个一维数组,长度为2
  9. 方法getIntersectingPoint:使用公式求出交点坐标,如果无法求出则强制退出并输出The two lines are parallel,如果求出则赋值给刚刚声明的一维数组
  10. 方法getIntersectingPoint:返回交点坐标数组

代码

import java.util.Scanner;public class Test8_31 {public static void main(String[] args) {//1. 主方法:声明一个4*2的二维数组double[][] array = new double[4][2];//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();}}//3. 主方法:声明一个长度为2的一维数组double[] intersection = new double[2];//4. 主方法:调用方法getIntersectingPoint,使用刚刚声明的一维数组接收方法返回值intersection = getIntersectingPoint(array);//5. 主方法:输出坐标,以如下格式输出:The intersecting point is at (2.88889, 1,1111)System.out.println("The intersecting point is at (" + intersection[0] + ", " + intersection[1] + ")");}public static double[] getIntersectingPoint(double[][] points){//6. 方法getIntersectingPoint:创建如下6个double数字a b c d e f,b和d初始值设置为1// a=-k1 b=1 c=-k2 d=1 e=b1 f=b2double a, c, e, f, b=1, d=1;//7. 方法getIntersectingPoint:对数组四个元素进行遍历,计算两个直线的斜率与截距// (分别赋值给-a -c e f)a = - (points[1][1] - points[0][1]) / (points[1][0] - points[0][0]);c = - (points[3][1] - points[2][1]) / (points[3][0] - points[2][0]);e = points[0][1] + a * points[0][0];f = points[2][1] + c * points[2][0];//8. 方法getIntersectingPoint:声明一个一维数组,长度为2double[] center = new double[2];//9. 方法getIntersectingPoint:使用公式求出交点坐标,如果无法求出则强制退出并输出,如果求出则赋值给刚刚声明的一维数组if (a == c){System.out.println("The two lines are parallel");System.exit(1);}center[0] = (e * d - b * f)  /  (a * d - b * c);center[1] = (a * f - e * c)  /  (a * d - b * c);//10. 方法getIntersectingPoint:返回交点坐标数组return center;}
}

本题运行实例

Enter x1, y1, x2, y2, x3, y3, x4, y4:
2 2 5 -1.0 4.0 2.0 -1.0 -2.0
The intersecting point is at (2.888888888888889, 1.1111111111111112)

Java黑皮书课后题第8章:*8.31(几何:交点)编写一个方法,返回两条直线的交点。四个点存放在4*2的二维数组points中。编写一个程序,提示用户输入4个点,并显示交点相关推荐

  1. Java黑皮书课后题第5章:*5.30(金融应用:复利值)假设你每月在储蓄账户上多存100美元,年利率为5%,那么每月利率是0.05 / 12 = 0.00417。编写程序提示用户输入数据显示定月钱数

    5.30(金融应用:复利值)假设你每月在储蓄账户上多存100美元,年利率为5%,那么每月利率是0.05 / 12 = 0.00417.编写程序提示用户输入数据显示定月钱数 题目 题目概述 破题 代码 ...

  2. Java黑皮书课后题第8章:**8.17(金融风暴)银行会互相借款……银行的总资产是它当时的余款减去它欠其他银行的贷款。如果一个银行的总资产在某个限以下,那么这个银行是不安全的。编写程序,找出所有不安

    **8.17(金融风暴)银行会互相借款--银行的总资产是它当时的余款减去它欠其他银行的贷款.如果一个银行的总资产在某个限以下,那么这个银行是不安全的.编写程序,找出所有不安全银行 题目 题目描述 破题 ...

  3. Java黑皮书课后题第6章:**6.34(打印日历)编程练习题3.21使用Zeller一致性原理来计算某天是星期几,使用Zeller的算法简化程序清单6-12以获得每月开始的第一天是星期几

    6.34(打印日历)编程练习题3.21使用Zeller一致性原理来计算某天是星期几,使用Zeller的算法简化程序清单6-12以获得每月开始的第一天是星期几 题目 题目描述 编程练习题3.21的Zel ...

  4. Java黑皮书课后题第6章:6.10(使用isPrime方法)程序清单6-7提供了测试某个数字是否是素数的方法isPrime(int number)。使用这个方法求小于10000的素数的个数

    6.10(使用isPrime方法)程序清单6-7提供了测试某个数字是否是素数的方法isPrime(int number).使用这个方法求小于10000的素数的个数 题目 题目描述 程序清单6-7代码 ...

  5. Java黑皮书课后题第8章:*8.32(几何:三角形面积)编写一个方法,使用下面的方法头,返回一个三角形的面积。编写一个程序,提示用户输入三角形的三个点,然后显示三角形的面积

    *8.32(几何:三角形面积)编写一个方法,使用下面的方法头,返回一个三角形的面积.编写一个程序,提示用户输入三角形的三个点,然后显示三角形的面积 题目 题目描述与运行示例 破题 代码 题目 题目描述 ...

  6. Java黑皮书课后题第9章:**9.12(几何:交点)假设两条线段相交。第一条线段的两个端点是(x1, y1)和(x2, y2),第二条线段的两个端点是(x3, y3)和(x4, y4)

    Java黑皮书课后题第9章:**9.12(几何:交点)假设两条线段相交.第一条线段的两个端点是(x1, y1)和(x2, y2),第二条线段的两个端点是(x3, y3)和(x4, y4) 题目 破题 ...

  7. Java黑皮书课后题第9章:*9.11(代数:2*2的线性方程)为一个2*2的线性方程设计一个名为LinearEquation的类

    Java黑皮书课后题第9章:*9.11(代数:2*2的线性方程)为一个2*2的线性方程设计一个名为LinearEquation的类 题目 破题 代码 Test10 Test11_LinearEquat ...

  8. Java黑皮书课后题第9章:*9.10(代数:二次方程式)为二次方程式设计一个名为QuadraticEquation的类

    Java黑皮书课后题第9章:*9.10(代数:二次方程式)为二次方程式设计一个名为QuadraticEquation的类 题目 破题 代码 Test10 Test10_QuadraticEquatio ...

  9. Java黑皮书课后题第1章:*1.11(人口估算)编写一个程序,显示未来5年的每年人口数。假设当前的人口是312 032 486,每年有365天

    Java黑皮书课后题第1章:*1.11(人口估算) 题目 题目描述 破题 代码块 方法评析 为什么print函数内的表达式不能分开 修改日志 题目 题目描述 *1.11(人口估算)编写一个程序,显示未 ...

最新文章

  1. 从中科院到BAT,如何准备秋招那件事儿(附B站录播)
  2. 如何合理使用 CPU 管理策略,提升容器性能?
  3. kafka与zookeeper版本对应关系表
  4. 常用思科设备图标(JPG+矢量图)
  5. python列表的append/entend/insert
  6. 回忆---中秋夜赴京城考OCP有感
  7. getBoundingClientRect说明
  8. SQL 取n到m条记录
  9. jsp--cookie
  10. 2019 年开源数据库报告发布:MySQL 仍卫冕!
  11. Metasploit是一款开源的安全漏洞检测工具,
  12. final修饰符,finally,finalize区别
  13. win64 安装Oracle 11g
  14. 感知机(Perceptron)为什么不能表示异或(XOR)
  15. TLC5615输出256点正弦波(振幅和频率可调)
  16. PostgreSQL 15新版本特性解读(含直播问答、PPT资料汇总)
  17. 员工档案管理系统的功能都有哪些?
  18. excel使用技巧手记
  19. C++语法学习笔记三十九:shared_ptr使用场景、陷阱、性能分析、使用建议
  20. royal tsx连接闪退_Royal TSX for Mac(最强远程管理软件)

热门文章

  1. 2019年湘潭大学程序设计竞赛(重现赛)补题:H.Chat(分组背包)
  2. KubeMeet 深圳站完整议题出炉
  3. 技术解密|阿里云多媒体 AI 团队是凭借什么拿下 CVPR2021 5冠1亚的?
  4. Flink 必知必会:Flink Runtime Architecture
  5. Serverless在游戏运营行业进行数据采集分析的最佳实践 链接:
  6. C#-析构方法与构造方法 087
  7. Unity3D游戏内存瘦身指南: UI优化是关键
  8. 如何快速找到最优路线?深入理解游戏中寻路算法
  9. 《轩辕传奇手游》主程序带你拆解MMORPG游戏客户端
  10. 在Unity实现游戏命令模式