Saturday 20 August 2016

Chapter 6 Exercise 39, Introduction to Java Programming, Tenth Edition Y. Daniel LiangY.

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) 



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