第三章第三十四题(几何:线段上的点)(Geometry: point on line segment)
-
*3.34(几何:线段上的点)编程练习题3.32显示了如何测试一个点是否在一个无限长的直线上。修改编程练习题3.32,测试一个点是否在一个线段上。编写一个程序,提示用户输入三个点 p0、p1 和 p2,显示p2是否在从p0到p1的线段上。
这里是一些运行示例:
Enter three points for p0, p1, and p2:1 1 2.5 2.5 1.5 1.5
(1.5, 1.5) is on the line segment from (1.0, 1.0) to (2.5, 2.5)
Enter three points for p0, p1, and p2:1 1 2 2 3.5 3.5
(3.5, 3.5) is not on the line segment from (1.0, 1.0) to (2.0, 2.0)*3.34(Geometry: point on line segment) Exercise 3.32 shows how to test whether a point is on an unbounded line. Revise Exercise 3.32 to test whether a point is on a line segment. Write a program that prompts the user to enter the three points for p0, p1, and p2 and displays whether p2 is on the line segment from p0 to p1.
Here are some sample runs:
Enter three points for p0, p1, and p2:1 1 2.5 2.5 1.5 1.5
(1.5, 1.5) is on the line segment from (1.0, 1.0) to (2.5, 2.5)
Enter three points for p0, p1, and p2:1 1 2 2 3.5 3.5
(3.5, 3.5) is not on the line segment from (1.0, 1.0) to (2.0, 2.0) -
参考代码:
package chapter03;
import java.util.Scanner;
public class Code_34 {
public static void main(String[] args) {
double xP0,yP0,xP1,yP1,xP2,yP2;
int discriminant;
// Prompt the user to enter the three points
System.out.print("Enter three points for p0, p1, and p2: ");
Scanner input = new Scanner(System.in);
xP0 = input.nextDouble();
yP0 = input.nextDouble();
xP1 = input.nextDouble();
yP1 = input.nextDouble();
xP2 = input.nextDouble();
yP2 = input.nextDouble();
discriminant = (int)((xP1 - xP0) * (yP2 - yP0) - (xP2 - xP0) * (yP1 - yP0));
if(0 == discriminant && xP2 <= (xP0 > xP1?xP0:xP1) && xP2 >= (xP0 > xP1?xP1:xP0))
System.out.println("(" + xP2 + ", " + yP2 + ") is on the line segment from"
+ " (" + xP0 + ", " + yP0 + ") to "
+ "(" + xP1 + ", " + yP1 + ")" );
else
System.out.println("(" + xP2 + ", " + yP2 + ") is not on the line segment from"
+ " (" + xP0 + ", " + yP0 + ") to "
+ "(" + xP1 + ", " + yP1 + ")" );
input.close();
}
}
- 结果显示:
Enter three points for p0, p1, and p2: 1 1 2.5 2.5 1.5 1.5
(1.5, 1.5) is on the line segment from (1.0, 1.0) to (2.5, 2.5)
Process finished with exit code 0