9.12 (Geometry: intersecting point)
Suppose two line segments intersect. The two end-points for the first line segment
are (x1, y1) and (x2, y2) and for the second line segment are (x3, y3) and (x4, y4).
Write a program that prompts the user to enter these four endpoints and displays the
intersecting point. As discussed in Program- ming Exercise 3.25, the intersecting point can
be found by solving a linear equation. Use the LinearEquation class in Programming Exercise 9.11
to solve this equation. See Programming Exercise 3.25 for sample runs
Suppose two line segments intersect. The two end-points for the first line segment
are (x1, y1) and (x2, y2) and for the second line segment are (x3, y3) and (x4, y4).
Write a program that prompts the user to enter these four endpoints and displays the
intersecting point. As discussed in Program- ming Exercise 3.25, the intersecting point can
be found by solving a linear equation. Use the LinearEquation class in Programming Exercise 9.11
to solve this equation. See Programming Exercise 3.25 for sample runs
public class LinearEquation { private double a; private double b; private double c; private double d; private double e; private double f; public LinearEquation(double a, double b, double c, double d, double e, double f) { this.a = a; this.b = b; this.c = c; this.d = d; this.e = e; this.f = f; } public double getA() { return a; } public void setA(double a) { this.a = a; } public double getB() { return b; } public void setB(double b) { this.b = b; } public double getC() { return c; } public void setC(double c) { this.c = c; } public double getD() { return d; } public void setD(double d) { this.d = d; } public double getE() { return e; } public void setE(double e) { this.e = e; } public double getF() { return f; } public void setF(double f) { this.f = f; } public double getX() { return (e * d - b * f) / ab_Minus_bc(); } public double getY() { return (a * f - e * c) / ab_Minus_bc(); } /** If there is no solution the lines are parallel **/ public boolean isSolvable(){ return ab_Minus_bc() != 0; } private double ab_Minus_bc(){ return a * d - b * c; } public static LinearEquation getIntersectingPoint(double x1,double y1,double x2,double y2, double x3,double y3,double x4,double y4) { double a = (y1 - y2); double b = (-x1 + x2); double c = (y3 - y4); double d = (-x3 + x4); double e = -y1 * (x1 - x2) + (y1 - y2) * x1; double f = -y3 * (x3 - x4) + (y3 - y4) * x3; return new LinearEquation(a,b,c,d,e,f); } public static LinearEquation getIntersectingPoint(MyPoint p1, MyPoint p2, MyPoint p3, MyPoint p4) { return getIntersectingPoint(p1.x(), p1.y(), p2.x(), p2.y(), p3.x(), p3.y(), p4.x(), p4.y()); } public static LinearEquation getIntersectingPoint(MyPoint[] p) { return getIntersectingPoint(p[0], p[1], p[2], p[3]); } public static LinearEquation getIntersectingPoint(double[][] points) { return getIntersectingPoint(points[0][0],points[0][1],points[1][0],points[1][1], points[2][0],points[2][1],points[3][0],points[3][1]); } }
import java.util.Scanner; public class Exercise_12 { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("Enter x1, y1, x2, y2, x3, y3, x4, y4: "); double[][] points = new double[4][2]; for (int i = 0; i < points.length; i++) for (int j = 0; j < points[i].length; j++) points[i][j] = input.nextDouble(); LinearEquation linear = LinearEquation.getIntersectingPoint(points); if (linear.isSolvable()) { System.out.println("The intersecting point is at (" + linear.getX() + ", " + linear.getY() + ")"); } else { System.out.println("The two lines are parallel"); } } }
No comments:
Post a Comment