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:
/** Return true if point (x2, y2) is on the left side of the
* directed line from (x0, y0) to (x1, y1) */
public static boolean leftOfTheLine(double x0, double y0,
double x1, double y1, double x2, double y2)
/** Return true if point (x2, y2) is on the same
* line from (x0, y0) to (x1, y1) */
public static boolean onTheSameLine(double x0, double y0,
double x1, double y1, double x2, double y2)
/** Return true if point (x2, y2) is on the
* line segment from (x0, y0) to (x1, y1) */
public static boolean onTheLineSegment(double x0, double y0,
double x1, double y1, double x2, double y2)
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)
/** Return true if point (x2, y2) is on the left side of the
* directed line from (x0, y0) to (x1, y1) */
public static boolean leftOfTheLine(double x0, double y0,
double x1, double y1, double x2, double y2)
/** Return true if point (x2, y2) is on the same
* line from (x0, y0) to (x1, y1) */
public static boolean onTheSameLine(double x0, double y0,
double x1, double y1, double x2, double y2)
/** Return true if point (x2, y2) is on the
* line segment from (x0, y0) to (x1, y1) */
public static boolean onTheLineSegment(double x0, double y0,
double x1, double y1, double x2, double y2)
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)
import java.util.Scanner; public class ProgrammingExercise6_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(); double y0 = input.nextDouble(); double x1 = input.nextDouble(); double y1 = input.nextDouble(); double x2 = input.nextDouble(); double y2 = input.nextDouble(); String p0 = "(" + x0 + ", " + y0 + ")"; String p1 = "(" + x1 + ", " + y1 + ")"; String p2 = "(" + x2 + ", " + y2 + ")"; if (leftOfTheLine(x0, y0, x1, y1, x2, y2)) { System.out.println(p2 + " is on the left side of the line from " + p0 + " to " + p1); } else if (onTheSameLine(x0, y0, x1, y1, x2, y2)) { if (onTheLineSegment(x0, y0, x1, y1, x2, y2)) { System.out.println(p2 + " is on the line segment from " + p0 + " to " + p1); } else { System.out.println(p2 + " is on the same line from " + p0 + " to " + p1); } } else { System.out.println(p2 + " is on the right side of the line from " + p0 + " to " + p1); } } /** * Return true if point (x2, y2) is on the left side of the directed line * from (x0, y0) to (x1, y1) */ public static boolean leftOfTheLine(double x0, double y0, double x1, double y1, double x2, double y2) { double c = (x1 - x0) * (y2 - y0) - (x2 - x0) * (y1 - y0); if (c > 0) { return true; } return false; } /** * Return true if point (x2, y2) is on the same line from (x0, y0) to (x1, * y1) */ public static boolean onTheSameLine(double x0, double y0, double x1, double y1, double x2, double y2) { double c = (x1 - x0) * (y2 - y0) - (x2 - x0) * (y1 - y0); if (c == 0) { return true; } return false; } /** * Return true if point (x2, y2) is on the line segment from (x0, y0) to * (x1, y1) */ 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 (((x2 < x1 && x2 > x0) || (x2 < x0 && x2 > x1)) && ((y2 < y1 && y2 > y0) || (y2 < y0 && y2 > y1))) { return true; } } return false; } }
No comments:
Post a Comment