Question: write a java program within the given template and read...
Write a java program within the given template and read the instruction below:
Preliminaries: An 𝑛-sided polygon 𝑃 (𝑛 ≥ 3) is a cyclic sequence 𝑣0, 𝑣1, ⋯ , 𝑣𝑛−1 of vertices as we walk around the polygon boundary. Each vertex 𝑣𝑖 (the 𝑖th vertex) is a point in the plane represented by its 𝐝𝐨𝐮𝐛𝐥𝐞 𝑥 and 𝑦 coordinates. The line-segment 𝑒𝑖 between vertex 𝑣𝑖 and the next vertex 𝑣 𝑖+1 𝑚𝑜𝑑 𝑛 (in cyclic order around the boundary) is called the 𝑖th edge of 𝑃, for 𝑖 = 0. . 𝑛 − 1. You may use the Point2D.Double class in the java.awt.geom package of the Java API to represent polygon vertices. The polygon is said to be simple if no two non-adjacent pair of edges intersect. That is, two edges 𝑒𝑖 and 𝑒𝑗 are completely disjoint from each other whenever 1 < 𝑗 − 𝑖 < 𝑛 − 1. A simple polygon is said to be convex if the internal angle of every vertex is at most 180°. Equivalently, the simple polygon is convex if every turn is consistently in the same orientation (clockwise or counter-clockwise) as we walk around the polygon boundary. This latter condition is computationally more useful (see the description of the Delta Test on the next page). The main methods we are interested in is polygon perimeter and area. Note that polygon area may not be well defined if the polygon is non-simple, since the notion of polygon “interior” may not be well defined in that case. We obviously need the boolean methods isSimple and isConvex as well.
Delta Test: Suppose we are given an ordered sequence of three points 𝑎, 𝑏, ; each point given by its 𝑥 and 𝑦 coordinates (e.g., 𝑥𝑎 and 𝑦𝑎). We want to know what is the orientation as we go from 𝑎 to 𝑏 to 𝑐 and back to 𝑎: is it clockwise (i.e., right turn), counter-clockwise (i.e., left turn), or collinear? The answer is given by the determinant of the 3 × 3 matrix shown below: 𝑑𝑒𝑙𝑡𝑎 (𝑎, 𝑏, 𝑐) = 𝑑𝑒𝑡 [𝑥𝑎 𝑦𝑎 1 𝑥𝑏 𝑦𝑏 1 𝑥𝑐 𝑦𝑐 1] This expression can be computed in 𝑂(1) time with arithmetic operations on the xy-coordinates of the three given points and is a very useful quantity with many geometric applications. (It is analogous to the compareTo method on Comparable types.) So, it’s worth providing a static helper method to compute 𝑑𝑒𝑙𝑡𝑎 (𝑎, 𝑏, 𝑐)
Triangle Signed Area: The signed area of the oriented triangle (𝑎, 𝑏, 𝑐) is 1/2 𝑑𝑒𝑙𝑡𝑎 (𝑎, 𝑏, 𝑐) , where the sign is positive, negative, or zero if the orientation is counter-clockwise, clockwise, or collinear, respectively.
Line-Segment Disjointness Test: A line-segment can be represented by a pair of delimiting points. We want to know whether a given pair of (closed) line segments (𝑎, 𝑏) and (𝑐, 𝑑) are disjoint. The possible cases are depicted in the figure below.
This test can be done in (1) time (e.g., using the Delta Test). (How?) You would need repeated use of such a test in the polygon simplicity checking method. So, it’s worth providing a static helper method for line-segment disjointness test. Note: You must implement this method yourself. You are not allowed to use the line intersection method provided by the Java API. Exercise your logical and analytical thinking and problem solving skills.
Polygon Area: Consider the simple polygon 𝑣0, 𝑣1, ⋯ , 𝑣𝑛−1 , where we denote the xy-coordinates of vertex 𝑣𝑖 by the pair 𝑥𝑖 , 𝑦𝑖 . For notational simplicity, we assume 𝑣𝑛≡ 𝑣0 and 𝑣−1 ≡ 𝑣𝑛−1 (i.e., index arithmetic is modulo n). Then the area of the simple polygon is: 1/2 𝑑𝑒𝑙𝑡(𝑜, 𝑣𝑖 , 𝑛−1 𝑖=0 𝑣𝑖+1) = 1/2 𝑥𝑖 𝑦𝑖+1 − 𝑦𝑖−1 𝑛−1 𝑖=0 , where 𝑜 = (0,0) denotes the origin. (Note: it’s absolute value of the sum, not the sum of absolute values!) This expression can be evaluated in (𝑛) time using arithmetic operations.
getSize() returns n, the number of edges of the polygon.
getVertex(i) returns the 𝑖th vertex of the polygon with precondition 0 ≤ 𝑖 < 𝑛.
Throws IndexOutOfBoundsException if the precondition is violated.
perimeter() returns the sum of the lengths of the edges of the polygon.
area() returns area of the interior of the polygon if this notion is well defined;
throws an exception if it’s not.
Class SimplePolygon (implements Polygon):
getNewPoly() constructs & returns a polygon, initialized by user provided data in O(n) time.
toString() returns a String representation of the polygon in O(n) time.
delta(a,b,c) returns twice the signed area of oriented triangle (a,b,c) in O(1) time.
disjointSegments (a,b,c,d) returns true iff closed line-segments (𝑎, 𝑏) and (𝑐, 𝑑) are disjoint.
Runs in (1) time.
disjointEdges(i, j) returns true iff edges 𝑒𝑖 and 𝑒𝑗 of the polygon are disjoint.
Runs in (1) time.
isSimple() returns true iff the polygon is simple. Running time is (𝑛^2).
area() returns area of the interior of the polygon with precondition that the polygon is
simple. Throws NonSimplePolygonException if the polygon is not simple (since in
that case the polygon “interior” may not be well defined). Runs in (𝑛) time, not
counting the simplicity test.
Class ConvexPolygon (extends SimplePolygon):
isConvex() returns true iff the polygon is convex, with precondition that the polygon is simple.
This method runs in (𝑛) time. If the polygon is non-simple, the correctness of the
returned result is not guaranteed.
Class NonSimplePolygonException (extends Exception):
Thrown to indicate that the polygon is non-simple.
This class has a main method that allows the user to input a variety of polygons and thoroughly test all aspects of the above types and methods, and displays or logs informative input-output.
The template is given in the link below, please see it, thank you
Please use the template given in the link: https://mega.nz/#!B08i0Srb!WKE-MaQFYPo_aZIOoA15xufMyuPLz1QOztho0rQ77oc