6.39(几何:点的位置)编程练习题3.32显示如何测试一个点是否在一个有向直线的左侧、右侧或在直线上,编写一个程序,输入三个点p0p1p2,显示p2是否在直线p0p1

  • 题目
    • 题目描述
    • 编程练习题3.32(非本题)
    • 破题
  • 代码

题目

题目描述

6.39(几何:点的位置)编程练习题3.32显示如何测试一个点是否在一个有向直线的左侧、右侧或在直线上,使用下面的方法头编写该方法:

判断x2y2是否在直线x0y0 x1y1左侧
public static boolean leftOfTheLine(double x0, double y0, double x1, double y1, double x2, double y2)

判断x2y2是否在直线x0y0 x1y1上
public static boolean onTheSameLine(double x0, double y0, double x1, double y1, double x2, double y2)

判断x2y2是否在线段x0y0 x1y1上
public static boolean onTheLineSegment(double x0, double y0, double x1, double y1, double x2, double y2)

编写一个程序,输入三个点p0p1p2,显示p2是否在直线p0p1的左侧、右侧、直线上,或者线段上
下面是一些运行示例:

Enter three points for p0, p1, and p2: 1 1 2 2 1 1.5
(1.0,1.5) is on the left side of the linefrom (1.0,1.0) to (2.0,2.0)
Enter three points for p0, p1, and p2: 1 1 2 2 1 -1
(1.0,-1.0) is on the right side of the linefrom (1.0,1.0) to (2.0,2.0)
Enter three points for p0, p1, and p2: 1 1 2 2 1.5 1.5
(1.5,1.5) is on the line segment from (1.0,1.0) to (2.0,2.0)
Enter three points for p0, p1, and p2: 1 1 2 2 3 3
(3.0,3.0) is on the line segment from (1.0,1.0) to (2.0,2.0)

编程练习题3.32(非本题)

import java.util.Scanner;public class Test3_32 {public static void main(String[] args) {// 获取三个点的x、y坐标值Scanner input = new Scanner(System.in);System.out.println("Enter three points for p0, p1, and p2: ");double x0 = input.nextDouble(), y0 = input.nextDouble();double x1 = input.nextDouble(), y1 = input.nextDouble();double x2 = input.nextDouble(), y2 = input.nextDouble();// 公式判断double result = (x1 - x0) * (y2 - y0) - (x2 - x0) * (y1 - y0);// 输出结果if(result > 0)System.out.println("p2 is on the left side of the line");else if(result == 0)System.out.println("p2 is on the same line");elseSystem.out.println("p2 is on the right side of the line");}
}

破题

main方法:接收三个点的横纵坐标值、分别传入四个方法并接受返回、输出结果
leftOfTheLine方法:判断P2(x2,y2)是否在线P0P1的左侧
rightOfTheLine方法:判断P2(x2,y2)是否在线P0P1的右侧
onTheSameLine方法:判断P2(x2,y2)是否在线P0P1上
onTheLineSegment方法:判断P2(x2,y2)是否在线段P0P1上

代码

import java.util.Scanner;public class Test6_39 {public static void main(String[] args) {// 获取三个点六个值Scanner input = new Scanner(System.in);System.out.print("Enter three points for p0, p1, and p2: ");double x0 = input.nextDouble(), y0 = input.nextDouble();double x1 = input.nextDouble(), y1 = input.nextDouble();double x2 = input.nextDouble(), y2 = input.nextDouble();// 传入四个方法boolean bool1 = leftOfTheLine(x0,y0,x1,y1,x2,y2);boolean bool2 = rightOfTheLine(x0,y0,x1,y1,x2,y2);boolean bool3 = onTheSameLine(x0,y0,x1,y1,x2,y2);boolean bool4 = onTheLineSegment(x0,y0,x1,y1,x2,y2);// 根据不同情况输出if (bool1){System.out.println("("+x2+","+y2+") is on the left side of the line");System.out.print("\tfrom ("+x0+","+y0+") to ("+x1+","+y1+")");}if (bool2){System.out.println("("+x2+","+y2+") is on the right side of the line");System.out.print("\tfrom ("+x0+","+y0+") to ("+x1+","+y1+")");}if (bool4){System.out.print("("+x2+","+y2+") is on the line segment from (" +x0+","+y0+") to ("+x1 + "," + y1 + ")");return;}if (bool3)System.out.print("("+x2+","+y2+") is on the same line from (" +x0+","+y0+") to ("+x1 + "," + y1 + ")");}// 判断左侧public static boolean leftOfTheLine(double x0, double y0, double x1, double y1, double x2, double y2){double result = (x1 - x0) * (y2 - y0) - (x2 - x0) * (y1 - y0);if(result > 0){return true;}else {return false;}}// 判断右侧public static boolean rightOfTheLine(double x0, double y0, double x1, double y1, double x2, double y2){double result = (x1 - x0) * (y2 - y0) - (x2 - x0) * (y1 - y0);if(result < 0){return true;}else {return false;}}// 判断是否在直线上public static boolean onTheSameLine(double x0, double y0, double x1, double y1, double x2, double y2){double result = (x1 - x0) * (y2 - y0) - (x2 - x0) * (y1 - y0);if(result == 0){return true;}else {return false;}}// 判断是否在线段上public static boolean onTheLineSegment(double x0, double y0, double x1, double y1, double x2, double y2){if (onTheSameLine(x0,y0,x1,y1,x2,y2)){if (x0 >= Math.min(x0, x1) && x0 <= Math.max(x0,x1) && y0 >= Math.min(y0,y1) && y0 <= Math.max(y0,y1))return true;return false;}return false;}
}

Java黑皮书课后题第6章:*6.39(几何:点的位置)编程练习题3.32显示如何测试一个点是否在一个有向直线的左侧、右侧或在直线上,编写一个程序,输入三个点p0p1p2,显示p2是否在直线p0p1相关推荐

  1. Java黑皮书课后题第7章:*7.20(修改选择排序法)在7.11节中,使用了选择排序法对数组排序。改写7.11节程序,重复地在当前数组中找到最大值,然后将这个最大值与该数组中的最后一个数进行交换

    7.20(修改选择排序法)在7.11节中,使用了选择排序法对数组排序.改写7.11节程序,重复地在当前数组中找到最大值,然后将这个最大值与该数组中的最后一个数进行交换 题目 题目描述 破题 代码 运行 ...

  2. 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 ...

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

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

  4. Java黑皮书课后题第9章:**9.9(几何:正n边形)在一个正n边形中,所有边的长度都相同,且所有角的度数都相等(即这个多边形是等边等角的)

    Java黑皮书课后题第9章:**9.9(几何:正n边形)在一个正n边形中,所有边的长度都相同,且所有角的度数都相等(即这个多边形是等边等角的) 题目 破题 代码 Test9 Test9_Regular ...

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

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

  6. 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 ...

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

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

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

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

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

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

  10. Java黑皮书课后题第9章:**9.13(Location类)设计一个名为Location的类,定位二维数组中的最大值及其位置。

    Java黑皮书课后题第9章:**9.13(Location类)设计一个名为Location的类,定位二维数组中的最大值及其位置 题目 破题 代码 Test13 Test13_Location 运行结果 ...

最新文章

  1. linux内核环境变量,Linux上安装配置JDK环境变量
  2. 程序员面试系列——合并排序(递归实现)
  3. WatchDog工作原理
  4. matlab优化工具箱
  5. 一个优美的架构需要考虑的几个问题
  6. 10 CO配置-控制-成本中心会计-定义成本中心类别
  7. “夺笋呐”!会员隐私随便看 诈骗就当没看见,中国最大婚恋网站紧急回应
  8. 华为机试HJ60:查找组成一个偶数最接近的两个素数
  9. Winboard - X
  10. 三个下载原版Windows镜像的方法
  11. php strom 快捷键,PHPStorm常用快捷键总结
  12. 2022大连理工887软件工程初试
  13. Lua的自我学习之路-语法学习9
  14. vue使用Moment插件格式化时间
  15. flea-cache使用之Redis集群模式接入
  16. 献给加班的各位同仁,祝工作顺利
  17. 如何利用在线帮助中心解决客户问题?
  18. 股票大作手回忆录(读书笔记)
  19. 分享50个漂亮的设计师个人作品集网站案例
  20. 小车自动往返工作原理_小车自动往返.ppt

热门文章

  1. 查找窗口隐藏了怎么办_如何还原U盘隐藏空间 U盘隐藏空间还原方法【详解】
  2. 我要发明计算机作文,我想发明什么作文小学四年级
  3. 如何利用云原生技术构建现代化应用?
  4. 快速入门数据结构和算法
  5. 《风暴英雄》里那些超棒的游戏设计
  6. 玩家为何沉迷于游戏?《密教模拟器》中的“上瘾体验”设计
  7. 手游特效太多怎么办?这里有一份性能优化方案可参考
  8. 《闪耀暖暖》可增加“心之门”爆闪耀的方法?网友:巧合罢了
  9. mysql密码正确但无法连接【彻底解决方案】
  10. gc()两分钟了解JDK8默认垃圾收集器(附英文)