Problem Statement
We want to increase the size of the given convex polygon by picking some of its vertices and moving them. We are not allowed to choose vertices that are adjacent to each other, and we are not allowed to move a chosen vertex a distance of more than 1. Of course the boundary segments between a moved vertex and its fixed adjacent vertices also move -- we require that moving boundary segments never intersect any other boundary segments. This guarantees that we will end up with a polygon (possibly not convex) that has a well-defined interior and exterior.
Create a class PolyMove that contains a method
addedArea that is given the sequence of vertices of a convex polygon in
Definition
- Class:
- PolyMove
- Method:
- addedArea
- Parameters:
- int[], int[]
- Returns:
- double
- Method signature:
- double addedArea(int[] x, int[] y)
- (be sure your method is public)
Notes
- A return value with either an absolute or relative error of less than 1.0E-9 is considered correct.
Constraints
- x and y will contain the same number of elements, a number between 3 and 50, inclusive.
- Each element of x and of y will be between -1000 and 1000, inclusive.
- The points corresponding to x and y will be distinct.
- The described polygon will be clockwise convex as specified above.
Examples
{0,1,2}
{0,1,0}
Returns: 1.0
This is an isosceles triangle that has an area of 1. We can increase its area most by moving the middle point from (1,1) to the point (1,2). Now the triangle will have an area of 2, so the increase in area is 1.
{0,1,1,0}
{1,1,0,0}
Returns: 1.4142135623730951
This polygon is a unit square. We can move (0,0) and (1,1), moving them each one unit along the 45 degree diagonal to (-1/sqrt(2),-1/sqrt(2)) and (1+sqrt(2),1+sqrt(2)) respectively. The new polygon is diamond shaped and has an area of 1 + sqrt(2), so its area has increased by sqrt(2).
{0,1,2,3,4,5,6,7,8,9}
{0,9,17,24,30,35,39,42,44,0}
Returns: 44.798129010506386
{0,50,100,150,200,200,0}
{200,202,203,203,202,0,0}
Returns: 296.1807877329639
{0,2,19,30,29}
{0,300,300,1,0}
Returns: 300.7603622931292
{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49}
{0,25,49,72,94,115,135,154,172,189,205,220,234,247,259,270,280,289,297,304,310,315,319,322,324,325,325,324,322,319,315,310,304,297,289,280,270,259,247,234,220,205,189,172,154,135,115,94,72,49}
Returns: 334.4101403819167
{0,25,50,50,0}
{50,1000,50,0,0}
Returns: 1000.3124511871279
{25,50,50,0,0}
{1000,50,0,0,50}
Returns: 1000.3124511871279
{0,0,20,40,60,40}
{-1,10,20,29,0,-20}
Returns: 71.64158982548453
{0,0,20,40,60,40,1}
{-1,10,20,29,0,-20,-3}
Returns: 68.78317965096906
{1,0,0,20,40,60,40}
{-3,-1,10,20,29,0,-20}
Returns: 68.78317965096906
{-691,-690,-672,-662,-644,-638,-620,-598,-571,-558,-540,-526,-507,-493,-473,-453,-435,-423,-406,-400,-390,-383,-373,-368,-361,-354,-352,-350,-900,-900,-899,-898,-893,-891,-885,-882,-881,-863,-844,-837,-824,-798,-777,-755,-733,-723,-714}
{-733,-733,-734,-735,-737,-738,-742,-748,-758,-763,-771,-778,-788,-797,-810,-826,-842,-854,-873,-881,-895,-906,-926,-937,-957,-980,-988,-999,-900,-880,-868,-862,-839,-834,-821,-815,-814,-797,-783,-778,-770,-758,-749,-742,-737,-735,-734}
Returns: 654.2379198484771
{-900,-899,-898,-891,-886,-870,-867,-865,-845,-824,-811,-801,-799,-779,-754,-735,-721,-717,-692,-671,-655,-639,-611,-592,-570,-543,-515,-494,-477,-469,-446,-429,-406,-399,-383,-371,-357,-340,-327,-318,-305,-291,-280,-271,-267,-262,-900}
{-880,-871,-867,-850,-842,-818,-814,-812,-794,-777,-767,-760,-759,-751,-742,-736,-732,-731,-727,-725,-724,-724,-725,-726,-729,-734,-742,-750,-757,-761,-774,-784,-799,-804,-816,-827,-841,-860,-877,-889,-909,-932,-952,-973,-983,-996,-900}
Returns: 734.8912341349624
{-861,-850,-840,-829,-822,-812,-808,-783,-771,-746,-723,-704,-682,-665,-659,-648,-640,-620,-598,-570,-544,-521,-500,-475,-446,-423,-409,-383,-356,-331,-311,-295,-284,-274,-250,-228,-208,-201,-192,-186,-171,-158,-147,-900,-900,-898,-892,-890,-880,-876}
{-796,-782,-771,-760,-754,-746,-743,-727,-721,-709,-698,-690,-681,-675,-673,-670,-668,-664,-661,-658,-656,-656,-658,-661,-666,-671,-675,-684,-696,-709,-720,-729,-736,-743,-760,-778,-798,-806,-818,-827,-850,-873,-893,-900,-880,-869,-849,-844,-824,-818}
Returns: 845.4355935541583
{-821,-810,-792,-777,-764,-747,-738,-712,-697,-671,-644,-638,-630,-617,-595,-587,-562,-554,-533,-514,-505,-498,-489,-473,-469,-462,-900,-900,-899,-898,-890,-868,-862,-841,-831}
{-824,-821,-818,-816,-815,-815,-816,-820,-823,-829,-836,-838,-841,-846,-856,-860,-875,-881,-901,-920,-930,-938,-950,-973,-979,-991,-900,-880,-873,-872,-865,-848,-844,-833,-828}
Returns: 485.0184100942037
{0, 1, 2 }
{0, 1, 0 }
Returns: 1.0
{0, 1, 1, 0 }
{1, 1, 0, 0 }
Returns: 1.4142135623730951
{0, 0, 1, 2, 1000, 1000, 800, 1 }
{0, 999, 1000, 1000, 999, 800, 200, -100 }
Returns: 1823.6365719780913
{2, 4, 0 }
{1, -1, 0 }
Returns: 2.0615528128088303
{-6, -7, -6, -4, -2, 1, 3, 4, 3, -1, -3 }
{-1, 2, 4, 6, 7, 7, 6, 4, -2, -5, -4 }
Returns: 15.924196446313525
{-10, -6, -2, 0, -2, -3, -6, -10, -11 }
{5, 6, 5, 1, -2, -3, -3, -2, 1 }
Returns: 14.535533905932738
{0, 0, 1, 3 }
{0, 1, 2, 0 }
Returns: 3.1622776601683795
{998, 982, 951, 904, 844, 770, 684, 587, 481, 368, 248, 125, 0, -125, -248, -368, -481, -587, -684, -770, -844, -904, -951, -982, -998, -998, -982, -951, -904, -844, -770, -684, -587, -481, -368, -248, -125, 0, 125, 248, 368, 481, 587, 684, 770, 844, 904, 951, 982, 998 }
{-62, -187, -309, -425, -535, -637, -728, -809, -876, -929, -968, -992, -1000, -992, -968, -929, -876, -809, -728, -637, -535, -425, -309, -187, -62, 62, 187, 309, 425, 535, 637, 728, 809, 876, 929, 968, 992, 1000, 992, 968, 929, 876, 809, 728, 637, 535, 425, 309, 187, 62 }
Returns: 3131.630342333775
{-500, -480, -460, -440, -420, -400, -380, -360, -340, -320, -300, -280, -260, -240, -220, -200, -180, -160, -140, -120, -100, -80, -60, -40, -20, 0, 20, 40, 60, 80, 100, 120, 140, 160, 180, 200, 220, 240, 260, 280, 300, 320, 340, 360, 380, 400, 420, 440, 460, 480 }
{-950, -901, -853, -806, -760, -715, -671, -628, -586, -545, -505, -466, -428, -391, -355, -320, -286, -253, -221, -190, -160, -131, -103, -76, -50, -25, -1, 22, 44, 65, 85, 104, 122, 139, 155, 170, 184, 197, 209, 220, 230, 239, 247, 254, 260, 265, 269, 272, 274, 275 }
Returns: 1587.1601877383662
{0, 50, 100, 100, 50, 0 }
{1, 2, 1, 0, -1, 0 }
Returns: 100.03998401278722
{0, 0, 2, 4, 4, 2 }
{0, 1, 2, 1, 0, -1 }
Returns: 4.82842712474619
{0, 1, 2, 2, 1 }
{0, 1, 1, -1, -1 }
Returns: 2.23606797749979
{984, 976, 953, 914, 862, 796, 717, 627, 527, 418, 304, 184, 61, -61, -184, -304, -418, -527, -627, -717, -796, -862, -914, -953, -976, -983, -976, -953, -914, -862, -796, -717, -627, -527, -419, -304, -184, -61, 61, 184, 303, 418, 527, 627, 717, 796, 862, 914, 953, 976 }
{0, -71, -142, -210, -276, -336, -392, -441, -483, -518, -544, -562, -571, -571, -562, -544, -518, -483, -441, -392, -336, -276, -210, -142, -71, 0, 71, 142, 210, 276, 336, 392, 441, 483, 518, 544, 562, 571, 571, 562, 544, 518, 483, 441, 392, 336, 276, 210, 142, 71 }
Returns: 2480.165866400116
{1, 2, 0 }
{1, 0, 0 }
Returns: 1.0
{0, 1, 2, 7 }
{0, 5, 8, 3 }
Returns: 8.246211251235321
{0, -50, -51, -51, -50, 0, 50, 51, 51, 50 }
{-500, 0, 20, 21, 41, 541, 41, 21, 20, 0 }
Returns: 1044.9899521048037
{0, 10, 0 }
{10, 0, 0 }
Returns: 7.0710678118654755
{0, 7, 500 }
{0, 124, -3 }
Returns: 254.5476379776485
{0, 10, 20, 20, 10 }
{0, 5, 5, -5, -5 }
Returns: 20.615528128088304
{0, 1, 432, 0 }
{1, 1, 0, 0 }
Returns: 432.001157405857
{1, 2, 3, 12, 10 }
{1, 2, 2, 1, 0 }
Returns: 10.524937810560445
{0, 2, 4, 1 }
{1, 5, 3, 0 }
Returns: 5.0990195135927845
{0, 3, 4, 3, 0, -3, -4, -3 }
{4, 3, 0, -3, -4, -3, 0, 3 }
Returns: 12.0
{0, -20, -19, -18, 0, 18, 19, 20 }
{-1, 0, 5, 6, 23, 6, 5, 0 }
Returns: 46.1725046566048
{-5, -4, -2, 0, 3, 4, 3, -4 }
{0, 1, 2, 2, 1, 0, -1, -1 }
Returns: 9.383414268677662
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44 }
{0, -1, -3, -6, -10, -15, -21, -28, -36, -45, -55, -66, -78, -91, -105, -120, -136, -153, -171, -190, -210, -231, -253, -276, -300, -325, -351, -378, -406, -435, -465, -496, -528, -561, -595, -630, -666, -703, -741, -780, -820, -861, -903, -946, -990 }
Returns: 989.1766644870596
{0, 100, 0, -100 }
{1, 0, -1, 0 }
Returns: 200.0
{3, 1, 7, 11, 10, 8 }
{1, 8, 13, 11, 5, 1 }
Returns: 15.390053977216382
{0, 1, 26 }
{0, 1, 0 }
Returns: 13.0
{0, 0, 98, 100, 101, 102, 101, 100, 3, 2 }
{2, 800, 802, 801, 800, 5, 3, 2, 1, 1 }
Returns: 898.3103343711609
{0, 2, 2, 0, -1 }
{2, 2, 0, 0, 1 }
Returns: 3.1622776601683795
{-1000, 0, 1000, 1000, 0, -1000 }
{1, 2, 1, 0, -1, 0 }
Returns: 2000.001999998
{0, 1, 2, 3, 3, 2, 0 }
{1, 2, 2, 1, 0, -3, 0 }
Returns: 5.4156547790585154
{2, 0, 1 }
{0, 0, 1 }
Returns: 1.0
{0, 0, 3, 6, 6, 1 }
{0, 7, 8, 7, 0, -1 }
Returns: 11.748119440177575
{0, 1000, 500, -500, -1000 }
{1, 0, -1, -1, 0 }
Returns: 1750.000166666648
{0, 0, 1, 2, 2 }
{0, 50, 100, 100, 50 }
Returns: 100.01249893770307
{2, 4, 3, 2, 1 }
{7, 2, 1, 1, 2 }
Returns: 6.041381265149109
{-1000, -1000, 999, 800 }
{-1000, 1000, 997, 0 }
Returns: 2825.5990515287194
{0, 0, 2, 3, 4, 3, 2 }
{0, 4, 3, 2, 0, -1, -1 }
Returns: 5.995358041299246
{0, 0, 1 }
{0, 1, 0 }
Returns: 0.7071067811865476
{0, 3, 6, 6, 3, 0 }
{1, 2, 1, -1, -2, -1 }
Returns: 7.242640687119284
{1, 3, 6, 4, 0 }
{3, 7, 3, 1, 0 }
Returns: 7.161988519181639
{0, 100, 50 }
{0, 100, 49 }
Returns: 70.71067811865476
{0, 2, 0 }
{1, 0, 0 }
Returns: 1.118033988749895
{10, 0, 1, 2, 10, 18, 19, 20 }
{-1, 0, 2, 3, 10, 3, 2, 0 }
Returns: 22.041594578792296
{0, 50, 100, 100, 51 }
{0, 1, 0, -1, -1 }
Returns: 100.00249993750313
{-99, -83, -31, 38, 90, 91, 26 }
{-86, 44, 93, 71, -23, -87, -89 }
Returns: 274.55264938745006
{0, 1, 2, 1, 0, -1 }
{1000, 1000, 500, 0, 0, 500 }
Returns: 1000.0039999840001
{0, 3, 6, 6, 1 }
{0, 1, 0, -1, -1 }
Returns: 6.041381265149109
{2, 0, 1, 3, 4 }
{-1000, 999, 1000, 1000, 999 }
Returns: 2000.0002499999844
{0, 10, 12, 13, 10 }
{0, 10, 11, 10, -10 }
Returns: 20.547511554864492
{10, 0, 0, 5, 10 }
{0, 0, 5, 10, 5 }
Returns: 11.180339887498949
{0, 100, 200, 200, 100 }
{0, 1, 0, -1, -1 }
Returns: 200.00124999218758
{-100, 0, 100, 100, 0, -100, -101 }
{3, 4, 3, 1, 0, 1, 2 }
Returns: 201.0
{0, 0, 2 }
{0, 1, 0 }
Returns: 1.118033988749895
{0, 1, 102, 101, 100 }
{1, 6, 5, 3, 2 }
Returns: 101.54910064039849
{0, 1, 2 }
{0, 1, 0 }
Returns: 1.0
{0, 1, 1, 0 }
{1, 1, 0, 0 }
Returns: 1.4142135623730951
{0, 0, 1, 2, 1000, 1000, 800, 1 }
{0, 999, 1000, 1000, 999, 800, 200, -100 }
Returns: 1823.6365719780913
{2, 4, 0 }
{1, -1, 0 }
Returns: 2.0615528128088303
{-6, -7, -6, -4, -2, 1, 3, 4, 3, -1, -3 }
{-1, 2, 4, 6, 7, 7, 6, 4, -2, -5, -4 }
Returns: 15.924196446313525
{-10, -6, -2, 0, -2, -3, -6, -10, -11 }
{5, 6, 5, 1, -2, -3, -3, -2, 1 }
Returns: 14.535533905932738
{0, 0, 1, 3 }
{0, 1, 2, 0 }
Returns: 3.1622776601683795
{998, 982, 951, 904, 844, 770, 684, 587, 481, 368, 248, 125, 0, -125, -248, -368, -481, -587, -684, -770, -844, -904, -951, -982, -998, -998, -982, -951, -904, -844, -770, -684, -587, -481, -368, -248, -125, 0, 125, 248, 368, 481, 587, 684, 770, 844, 904, 951, 982, 998 }
{-62, -187, -309, -425, -535, -637, -728, -809, -876, -929, -968, -992, -1000, -992, -968, -929, -876, -809, -728, -637, -535, -425, -309, -187, -62, 62, 187, 309, 425, 535, 637, 728, 809, 876, 929, 968, 992, 1000, 992, 968, 929, 876, 809, 728, 637, 535, 425, 309, 187, 62 }
Returns: 3131.630342333775
{-500, -480, -460, -440, -420, -400, -380, -360, -340, -320, -300, -280, -260, -240, -220, -200, -180, -160, -140, -120, -100, -80, -60, -40, -20, 0, 20, 40, 60, 80, 100, 120, 140, 160, 180, 200, 220, 240, 260, 280, 300, 320, 340, 360, 380, 400, 420, 440, 460, 480 }
{-950, -901, -853, -806, -760, -715, -671, -628, -586, -545, -505, -466, -428, -391, -355, -320, -286, -253, -221, -190, -160, -131, -103, -76, -50, -25, -1, 22, 44, 65, 85, 104, 122, 139, 155, 170, 184, 197, 209, 220, 230, 239, 247, 254, 260, 265, 269, 272, 274, 275 }
Returns: 1587.1601877383662
{0, 50, 100, 100, 50, 0 }
{1, 2, 1, 0, -1, 0 }
Returns: 100.03998401278722
{0, 0, 2, 4, 4, 2 }
{0, 1, 2, 1, 0, -1 }
Returns: 4.82842712474619
{0, 1, 2, 2, 1 }
{0, 1, 1, -1, -1 }
Returns: 2.23606797749979
{984, 976, 953, 914, 862, 796, 717, 627, 527, 418, 304, 184, 61, -61, -184, -304, -418, -527, -627, -717, -796, -862, -914, -953, -976, -983, -976, -953, -914, -862, -796, -717, -627, -527, -419, -304, -184, -61, 61, 184, 303, 418, 527, 627, 717, 796, 862, 914, 953, 976 }
{0, -71, -142, -210, -276, -336, -392, -441, -483, -518, -544, -562, -571, -571, -562, -544, -518, -483, -441, -392, -336, -276, -210, -142, -71, 0, 71, 142, 210, 276, 336, 392, 441, 483, 518, 544, 562, 571, 571, 562, 544, 518, 483, 441, 392, 336, 276, 210, 142, 71 }
Returns: 2480.165866400116
{1, 2, 0 }
{1, 0, 0 }
Returns: 1.0
{0, 1, 2, 7 }
{0, 5, 8, 3 }
Returns: 8.246211251235321
{0, -50, -51, -51, -50, 0, 50, 51, 51, 50 }
{-500, 0, 20, 21, 41, 541, 41, 21, 20, 0 }
Returns: 1044.9899521048037
{0, 10, 0 }
{10, 0, 0 }
Returns: 7.0710678118654755
{0, 7, 500 }
{0, 124, -3 }
Returns: 254.5476379776485
{0, 10, 20, 20, 10 }
{0, 5, 5, -5, -5 }
Returns: 20.615528128088304
{0, 1, 432, 0 }
{1, 1, 0, 0 }
Returns: 432.001157405857
{1, 2, 3, 12, 10 }
{1, 2, 2, 1, 0 }
Returns: 10.524937810560445
{0, 2, 4, 1 }
{1, 5, 3, 0 }
Returns: 5.0990195135927845
{0, 3, 4, 3, 0, -3, -4, -3 }
{4, 3, 0, -3, -4, -3, 0, 3 }
Returns: 12.0
{0, -20, -19, -18, 0, 18, 19, 20 }
{-1, 0, 5, 6, 23, 6, 5, 0 }
Returns: 46.1725046566048
{-5, -4, -2, 0, 3, 4, 3, -4 }
{0, 1, 2, 2, 1, 0, -1, -1 }
Returns: 9.383414268677662
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44 }
{0, -1, -3, -6, -10, -15, -21, -28, -36, -45, -55, -66, -78, -91, -105, -120, -136, -153, -171, -190, -210, -231, -253, -276, -300, -325, -351, -378, -406, -435, -465, -496, -528, -561, -595, -630, -666, -703, -741, -780, -820, -861, -903, -946, -990 }
Returns: 989.1766644870596
{0, 100, 0, -100 }
{1, 0, -1, 0 }
Returns: 200.0
{3, 1, 7, 11, 10, 8 }
{1, 8, 13, 11, 5, 1 }
Returns: 15.390053977216382
{0, 1, 26 }
{0, 1, 0 }
Returns: 13.0
{0, 0, 98, 100, 101, 102, 101, 100, 3, 2 }
{2, 800, 802, 801, 800, 5, 3, 2, 1, 1 }
Returns: 898.3103343711609
{0, 2, 2, 0, -1 }
{2, 2, 0, 0, 1 }
Returns: 3.1622776601683795
{-1000, 0, 1000, 1000, 0, -1000 }
{1, 2, 1, 0, -1, 0 }
Returns: 2000.001999998
{0, 1, 2, 3, 3, 2, 0 }
{1, 2, 2, 1, 0, -3, 0 }
Returns: 5.4156547790585154
{2, 0, 1 }
{0, 0, 1 }
Returns: 1.0
{0, 0, 3, 6, 6, 1 }
{0, 7, 8, 7, 0, -1 }
Returns: 11.748119440177575
{0, 1000, 500, -500, -1000 }
{1, 0, -1, -1, 0 }
Returns: 1750.000166666648
{0, 0, 1, 2, 2 }
{0, 50, 100, 100, 50 }
Returns: 100.01249893770307
{2, 4, 3, 2, 1 }
{7, 2, 1, 1, 2 }
Returns: 6.041381265149109
{-1000, -1000, 999, 800 }
{-1000, 1000, 997, 0 }
Returns: 2825.5990515287194
{0, 0, 2, 3, 4, 3, 2 }
{0, 4, 3, 2, 0, -1, -1 }
Returns: 5.995358041299246
{0, 0, 1 }
{0, 1, 0 }
Returns: 0.7071067811865476
{0, 3, 6, 6, 3, 0 }
{1, 2, 1, -1, -2, -1 }
Returns: 7.242640687119284
{1, 3, 6, 4, 0 }
{3, 7, 3, 1, 0 }
Returns: 7.161988519181639
{0, 100, 50 }
{0, 100, 49 }
Returns: 70.71067811865476
{0, 2, 0 }
{1, 0, 0 }
Returns: 1.118033988749895
{10, 0, 1, 2, 10, 18, 19, 20 }
{-1, 0, 2, 3, 10, 3, 2, 0 }
Returns: 22.041594578792296
{0, 50, 100, 100, 51 }
{0, 1, 0, -1, -1 }
Returns: 100.00249993750313
{-99, -83, -31, 38, 90, 91, 26 }
{-86, 44, 93, 71, -23, -87, -89 }
Returns: 274.55264938745006
{0, 1, 2, 1, 0, -1 }
{1000, 1000, 500, 0, 0, 500 }
Returns: 1000.0039999840001
{0, 3, 6, 6, 1 }
{0, 1, 0, -1, -1 }
Returns: 6.041381265149109
{2, 0, 1, 3, 4 }
{-1000, 999, 1000, 1000, 999 }
Returns: 2000.0002499999844
{0, 10, 12, 13, 10 }
{0, 10, 11, 10, -10 }
Returns: 20.547511554864492
{10, 0, 0, 5, 10 }
{0, 0, 5, 10, 5 }
Returns: 11.180339887498949
{0, 100, 200, 200, 100 }
{0, 1, 0, -1, -1 }
Returns: 200.00124999218758
{-100, 0, 100, 100, 0, -100, -101 }
{3, 4, 3, 1, 0, 1, 2 }
Returns: 201.0
{0, 0, 2 }
{0, 1, 0 }
Returns: 1.118033988749895
{0, 1, 102, 101, 100 }
{1, 6, 5, 3, 2 }
Returns: 101.54910064039849