6.39(幾何:點的位置)編程練習題3.32顯示如何測試一個點是否在一個有向直線的左側、右側,或在該直線上。使用下麵的方法頭編寫該方法: public static boolean leftOfTheLine(double x0, double y0, double x1, double y1, d ...
6.39(幾何:點的位置)編程練習題3.32顯示如何測試一個點是否在一個有向直線的左側、右側,或在該直線上。使用下麵的方法頭編寫該方法:
public static boolean leftOfTheLine(double x0, double y0, double x1, double y1, double x2, double y2)
public static boolean onTheSameLine(double x0, double y0, double x1, double y1, double x2, double y2)
public static boolean onTheLineSegment(double x0, double y0, double x1, double y1, double x2, double y2)
編寫一個程式,提示用戶輸入三個點賦給p0、p1和p2,顯示p2是否在從p0到p1的直線的左側、右側、直線上,或者線段上。
下麵是一些運行示例:
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 same line from (1.0, 1.0) to (2.0, 2.0)
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 line from (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 line from (1.0, 1.0) to (2.0, 2.0)
6.39(Geometry: point position) Programming Exercise 3.32 shows how to test whether a point is on the left side of a directed line, on the right, or on the same line. Write the methods with the following headers:
public static boolean leftOfTheLine(double x0, double y0, double x1, double y1, double x2, double y2)
public static boolean onTheSameLine(double x0, double y0, double x1, double y1, double x2, double y2)
public static boolean onTheLineSegment(double x0, double y0, double x1, double y1, double x2, double y2)
Write a program that prompts the user to enter the three points for p0, p1, and p2and displays whether p2 is on the left side of the line from p0 to p1, right side, the same line, or on the line segment.
Here are some sample runs:
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 same line from (1.0, 1.0) to (2.0, 2.0)
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 line from (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 line from (1.0, 1.0) to (2.0, 2.0)
下麵是參考答案代碼:
// https://cn.fankuiba.com
import java.util.Scanner;
public class Ans6_39_page205 {
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();
double y0 = input.nextDouble();
double x1 = input.nextDouble();
double y1 = input.nextDouble();
double x2 = input.nextDouble();
double y2 = input.nextDouble();
if (onTheSameLine(x0, y0, x1, y1, x2, y2)) {
if (onTheLineSegment(x0, y0, x1, y1, x2, y2)) {
System.out.printf("(%.1f, %.1f) is on the line segment from "
+ "(%.1f, %.1f) to (%.1f, %.1f)", x2, y2, x0, y0, x1, y1);
} else {
System.out.printf("(%.1f, %.1f) is on the same line from "
+ "(%.1f, %.1f) to (%.1f, %.1f)", x2, y2, x0, y0, x1, y1);
}
} else {
if (leftOfTheLine(x0, y0, x1, y1, x2, y2)) {
System.out.printf("(%.1f, %.1f) is on the left side of the line from "
+ "(%.1f, %.1f) to (%.1f, %.1f)", x2, y2, x0, y0, x1, y1);
} else {
System.out.printf("(%.1f, %.1f) is on the right side of the line from "
+ "(%.1f, %.1f) to (%.1f, %.1f)", x2, y2, x0, y0, x1, y1);
}
}
}
public static boolean leftOfTheLine(double x0, double y0,
double x1, double y1, double x2, double y2) {
if ((x1 - x0) * (y2 - y0) - (x2 - x0) * (y1 - y0) > 0)
return true;
else
return false;
}
public static boolean onTheSameLine(double x0, double y0,
double x1, double y1, double x2, double y2) {
return (x1 - x0) * (y2 - y0) - (x2 - x0) * (y1 - y0) == 0;
}
public static boolean onTheLineSegment(double x0, double y0,
double x1, double y1, double x2, double y2) {
if ((x1 - x0) * (y2 - y0) - (x2 - x0) * (y1 - y0) == 0 &&
x2 <= (Math.max(x0, x1)) && x2 >= (Math.min(x1, x0)))
return true;
else
return false;
}
}
適用Java語言程式設計與數據結構(基礎篇)(原書第11版)Java語言程式設計(基礎篇)(原書第10/11版)
發佈在博客:(https://cn.fankuiba.com)