{"group":{"id":1,"name":"Community","lockable":false,"created_at":"2012-01-18T18:02:15.000Z","updated_at":"2026-04-06T14:01:22.000Z","description":"Problems submitted by members of the MATLAB Central community.","is_default":true,"created_by":161519,"badge_id":null,"featured":false,"trending":false,"solution_count_in_trending_period":0,"trending_last_calculated":"2026-04-06T00:00:00.000Z","image_id":null,"published":true,"community_created":false,"status_id":2,"is_default_group_for_player":false,"deleted_by":null,"deleted_at":null,"restored_by":null,"restored_at":null,"description_opc":null,"description_html":null,"published_at":null},"problems":[{"id":44694,"title":"Monte Carlo integration:  area of a polygon","description":"The area of a polygon (or any plane shape) can be evaluated by \u003chttps://www.mathworks.com/matlabcentral/cody/problems/179 Monte Carlo integration\u003e.  The process involves 'random' sampling of (x,y) points in the xy plane, and testing whether they fall inside or outside the shape.  That is illustrated schematically below for a circle.  \r\n\r\n\u003c\u003chttps://upload.wikimedia.org/wikipedia/commons/thumb/2/20/MonteCarloIntegrationCircle.svg/247px-MonteCarloIntegrationCircle.svg.png\u003e\u003e\r\n\r\n^\r\n\r\n*Steps:*\r\n\r\n# Define a 2D region within which to sample points.  In the present problem you must choose the rectangular box (aligned to the axes) that bounds the specified polygon.  \r\n# By a 'random' process generate coordinates of a point within the bounding box.  In the present problem a basic scheme using the uniform pseudorandom distribution available in MATLAB must be employed.  _Other schemes in use include quasi-random sampling (for greater uniformity of coverage) and stratified sampling (with more attention near the edges of the polygon)._\r\n# Determine \u003chttps://www.mathworks.com/matlabcentral/cody/problems/198 whether the sampled point is inside or outside the polygon\u003e.  _Due to working in double precision, it is extremely unlikely to sample a point falling exactly on the edge of the polygon, and consequently if it does happen it doesn't really matter whether it's counted as inside or outside or null._  \r\n# Repeat steps 2–3 |N| times.  \r\n# Based upon the proportion of sampled points falling within the polygon, report the approximate area of the polygon.  \r\n\r\nInputs to your function will be |N|, the number of points to sample, and |polygonX| \u0026 |polygonY|, which together constitute \u003chttps://www.mathworks.com/matlabcentral/cody/problems/194 an ordered list of polygon vertices\u003e.  |N| will always be a positive integer.  |polygonX| \u0026 |polygonY| will always describe a single, continuous outline;  however, the polygon may be self-intersecting.  \r\n\r\nFor polygons that are self-intersecting, you must find the area of the enclosed point set. In the case of the cross-quadrilateral, it is treated as two simple triangles (cf. three triangles in the first figure below), and the clockwise/counterclockwise ordering of points is irrelevant.  A self-intersecting pentagram (left \u0026 middle of the second figure below) will therefore have the same area as a concave decagon (right).\r\n\r\n\u003c\u003chttps://upload.wikimedia.org/wikipedia/commons/thumb/0/0f/Complex_polygon.svg/288px-Complex_polygon.svg.png\u003e\u003e\r\n\r\n\u003c\u003chttps://upload.wikimedia.org/wikipedia/commons/thumb/8/80/Pentagram_interpretations.svg/320px-Pentagram_interpretations.svg.png\u003e\u003e\r\n\r\n^\r\n\r\nEXAMPLE\r\n\r\n % Input\r\n N = 1000\r\n polygonX = [1 0 -1  0]\r\n polygonY = [0 1  0 -1]\r\n % Output\r\n A = 2.036\r\n\r\nExplanation:  the above polygon is a square of side-length √2 centred on the origin, but rotated by 45°.  The exact area is hence 2.  As the value of |N| is moderate, the estimate by Monte Carlo integration is moderately accurate (an error of 0.036 in this example, corresponding to 509 of the 1000 sampled points falling within the polygon).  \r\nOf course, if the code were run again then a slightly different value of |A| would probably be returned, such as |A|=1.992 (corresponding to 498 of the 1000 sampled points falling within the polygon), due to the random qualities of the technique.  ","description_html":"\u003cp\u003eThe area of a polygon (or any plane shape) can be evaluated by \u003ca href = \"https://www.mathworks.com/matlabcentral/cody/problems/179\"\u003eMonte Carlo integration\u003c/a\u003e.  The process involves 'random' sampling of (x,y) points in the xy plane, and testing whether they fall inside or outside the shape.  That is illustrated schematically below for a circle.\u003c/p\u003e\u003cimg src = \"https://upload.wikimedia.org/wikipedia/commons/thumb/2/20/MonteCarloIntegrationCircle.svg/247px-MonteCarloIntegrationCircle.svg.png\"\u003e\u003cp\u003e^\u003c/p\u003e\u003cp\u003e\u003cb\u003eSteps:\u003c/b\u003e\u003c/p\u003e\u003col\u003e\u003cli\u003eDefine a 2D region within which to sample points.  In the present problem you must choose the rectangular box (aligned to the axes) that bounds the specified polygon.\u003c/li\u003e\u003cli\u003eBy a 'random' process generate coordinates of a point within the bounding box.  In the present problem a basic scheme using the uniform pseudorandom distribution available in MATLAB must be employed.  \u003ci\u003eOther schemes in use include quasi-random sampling (for greater uniformity of coverage) and stratified sampling (with more attention near the edges of the polygon).\u003c/i\u003e\u003c/li\u003e\u003cli\u003eDetermine \u003ca href = \"https://www.mathworks.com/matlabcentral/cody/problems/198\"\u003ewhether the sampled point is inside or outside the polygon\u003c/a\u003e.  \u003ci\u003eDue to working in double precision, it is extremely unlikely to sample a point falling exactly on the edge of the polygon, and consequently if it does happen it doesn't really matter whether it's counted as inside or outside or null.\u003c/i\u003e\u003c/li\u003e\u003cli\u003eRepeat steps 2–3 \u003ctt\u003eN\u003c/tt\u003e times.\u003c/li\u003e\u003cli\u003eBased upon the proportion of sampled points falling within the polygon, report the approximate area of the polygon.\u003c/li\u003e\u003c/ol\u003e\u003cp\u003eInputs to your function will be \u003ctt\u003eN\u003c/tt\u003e, the number of points to sample, and \u003ctt\u003epolygonX\u003c/tt\u003e \u0026 \u003ctt\u003epolygonY\u003c/tt\u003e, which together constitute \u003ca href = \"https://www.mathworks.com/matlabcentral/cody/problems/194\"\u003ean ordered list of polygon vertices\u003c/a\u003e.  \u003ctt\u003eN\u003c/tt\u003e will always be a positive integer.  \u003ctt\u003epolygonX\u003c/tt\u003e \u0026 \u003ctt\u003epolygonY\u003c/tt\u003e will always describe a single, continuous outline;  however, the polygon may be self-intersecting.\u003c/p\u003e\u003cp\u003eFor polygons that are self-intersecting, you must find the area of the enclosed point set. In the case of the cross-quadrilateral, it is treated as two simple triangles (cf. three triangles in the first figure below), and the clockwise/counterclockwise ordering of points is irrelevant.  A self-intersecting pentagram (left \u0026 middle of the second figure below) will therefore have the same area as a concave decagon (right).\u003c/p\u003e\u003cimg src = \"https://upload.wikimedia.org/wikipedia/commons/thumb/0/0f/Complex_polygon.svg/288px-Complex_polygon.svg.png\"\u003e\u003cimg src = \"https://upload.wikimedia.org/wikipedia/commons/thumb/8/80/Pentagram_interpretations.svg/320px-Pentagram_interpretations.svg.png\"\u003e\u003cp\u003e^\u003c/p\u003e\u003cp\u003eEXAMPLE\u003c/p\u003e\u003cpre\u003e % Input\r\n N = 1000\r\n polygonX = [1 0 -1  0]\r\n polygonY = [0 1  0 -1]\r\n % Output\r\n A = 2.036\u003c/pre\u003e\u003cp\u003eExplanation:  the above polygon is a square of side-length √2 centred on the origin, but rotated by 45°.  The exact area is hence 2.  As the value of \u003ctt\u003eN\u003c/tt\u003e is moderate, the estimate by Monte Carlo integration is moderately accurate (an error of 0.036 in this example, corresponding to 509 of the 1000 sampled points falling within the polygon).  \r\nOf course, if the code were run again then a slightly different value of \u003ctt\u003eA\u003c/tt\u003e would probably be returned, such as \u003ctt\u003eA\u003c/tt\u003e=1.992 (corresponding to 498 of the 1000 sampled points falling within the polygon), due to the random qualities of the technique.\u003c/p\u003e","function_template":"function A = monteCarloArea(N, polygonX, polygonY)\r\n    % Fun starts here\r\nend\r\n\r\n\r\n% Note:  the Test Suite has been designed to account for variability in outputs. \r\n%        Nevertheless, it is possible that on rare occasions a valid submission \r\n%        might fail the Test Suite in one instance.  \r\n%        If your submission has narrowly failed only one of the test cases, \r\n%        then please try resubmitting it, in case it was just due to 'bad luck'.  ","test_suite":"%% No silly stuff\r\n% This Test Suite can be updated if inappropriate 'hacks' are discovered \r\n% in any submitted solutions, so your submission's status may therefore change over time.  \r\n\r\n% BEGIN EDIT (2019-06-29).  \r\n% Ensure only builtin functions will be called.  \r\n! rm -v fileread.m\r\n! rm -v assert.m\r\n% END OF EDIT (2019-06-29).  \r\n\r\nassessFunctionAbsence({'regexp', 'regexpi', 'str2num'}, 'FileName','monteCarloArea.m')\r\n\r\nRE = regexp(fileread('monteCarloArea.m'), '\\w+', 'match');\r\ntabooWords = {'ans', 'area', 'polyarea'};\r\ntestResult = cellfun( @(z) ismember(z, tabooWords), RE );\r\nmsg = ['Please do not do that in your code!' char([10 13]) ...\r\n    'Found: ' strjoin(RE(testResult)) '.' char([10 13]) ...\r\n    'Banned word.' char([10 13])];\r\nassert(~any( testResult ), msg)\r\n\r\n\r\n%% Unit square, in first quadrant\r\nNvec = 1 : 7 : 200;\r\npolygonX = [0 1 1 0];\r\npolygonY = [0 0 1 1];\r\nareaVec = arrayfun(@(N) monteCarloArea(N, polygonX, polygonY), Nvec);\r\narea_correct = 1;\r\nassert( all(areaVec==area_correct) )\r\n\r\n%% 3×3 square, offset from origin, in all four quadrants\r\nNvec = 1 : 19 : 500;\r\npolygonX = [ 1 1 -2 -2];\r\npolygonY = [-1 2  2 -1];\r\nareaVec = arrayfun(@(N) monteCarloArea(N, polygonX, polygonY), Nvec);\r\narea_correct = 9;\r\nassert( all(areaVec==area_correct) )\r\n\r\n\r\n%% Diamond, centred on origin, in all four quadrants:  small N (1)\r\nN = 1;\r\npolygonX = [1 0 -1  0];\r\npolygonY = [0 1  0 -1];\r\narea_valid = [0 4];\r\nareaVec = arrayfun(@(dummy) monteCarloArea(N, polygonX, polygonY), 1:1000);\r\nassert( all( ismember(areaVec, area_valid) ) , 'Invalid areas reported' )\r\nassert( all( ismember(area_valid, areaVec) ) , 'Not all valid areas accessible in your sampling scheme')\r\n\r\n%% Diamond, centred on origin, in all four quadrants:  small N (2)\r\nN = 2;\r\npolygonX = [1 0 -1  0];\r\npolygonY = [0 1  0 -1];\r\narea_valid = [0 2 4];\r\nareaVec = arrayfun(@(dummy) monteCarloArea(N, polygonX, polygonY), 1:1000);\r\nassert( all( ismember(areaVec, area_valid) ) , 'Invalid areas reported' )\r\nassert( all( ismember(area_valid, areaVec) ) , 'Not all valid areas accessible in your sampling scheme')\r\n\r\n%% Diamond, centred on origin, in all four quadrants:  small N (3)\r\nN = 4;\r\npolygonX = [1 0 -1  0];\r\npolygonY = [0 1  0 -1];\r\narea_valid = [0:4];\r\nareaVec = arrayfun(@(dummy) monteCarloArea(N, polygonX, polygonY), 1:1000);\r\nassert( all( ismember(areaVec, area_valid) ) , 'Invalid areas reported' )\r\nassert( all( ismember(area_valid, areaVec) ) , 'Not all valid areas accessible in your sampling scheme')\r\n\r\n%% Diamond, centred on origin, in all four quadrants:  moderate N (1)\r\nN = 100;\r\npolygonX = [1 0 -1  0];\r\npolygonY = [0 1  0 -1];\r\narea_exact = 2;\r\nfor j = 1 : 3,\r\n    areaVec = arrayfun(@(dummy) monteCarloArea(N, polygonX, polygonY), 1:10);\r\n    assert( length(unique(areaVec)) \u003e 4 , 'Cannot have so many identical outputs')\r\n    worstErrorFraction = max( abs(area_exact - areaVec) ) / area_exact\r\n    assert( worstErrorFraction \u003e 0.05 , 'Implausibly accurate' )\r\n    assert( worstErrorFraction \u003c 0.40 , 'Implausibly inaccurate' )\r\nend;\r\n\r\n%% Diamond, centred on origin, in all four quadrants:  moderate N (2)\r\nN = 1000;\r\npolygonX = [1 0 -1  0];\r\npolygonY = [0 1  0 -1];\r\narea_exact = 2;\r\nfor j = 1 : 3,\r\n    areaVec = arrayfun(@(dummy) monteCarloArea(N, polygonX, polygonY), 1:10);\r\n    assert( length(unique(areaVec)) \u003e 5 , 'Cannot have so many identical outputs')\r\n    worstErrorFraction = max( abs(area_exact - areaVec) ) / area_exact\r\n    assert( worstErrorFraction \u003e 0.02 , 'Implausibly accurate' )\r\n    assert( worstErrorFraction \u003c 0.15 , 'Implausibly inaccurate' )\r\nend;\r\n\r\n%% Diamond, centred on origin, in all four quadrants:  moderate N (3)\r\nN = 10000;\r\npolygonX = [1 0 -1  0];\r\npolygonY = [0 1  0 -1];\r\narea_exact = 2;\r\nfor j = 1 : 3,\r\n    areaVec = arrayfun(@(dummy) monteCarloArea(N, polygonX, polygonY), 1:10);\r\n    assert( length(unique(areaVec)) \u003e 6 , 'Cannot have so many identical outputs')\r\n    worstErrorFraction = max( abs(area_exact - areaVec) ) / area_exact\r\n    assert( worstErrorFraction \u003e 0.004 , 'Implausibly accurate' )\r\n    assert( worstErrorFraction \u003c 0.049 , 'Implausibly inaccurate' )\r\nend;\r\n\r\n%% Diamond, centred on origin, in all four quadrants:  large N\r\nN = 100000;\r\npolygonX = [1 0 -1  0];\r\npolygonY = [0 1  0 -1];\r\narea_exact = 2;\r\nfor j = 1 : 3,\r\n    areaVec = arrayfun(@(dummy) monteCarloArea(N, polygonX, polygonY), 1:10);\r\n    assert( length(unique(areaVec)) \u003e 7 , 'Cannot have so many identical outputs')\r\n    worstErrorFraction = max( abs(area_exact - areaVec) ) / area_exact\r\n    assert( worstErrorFraction \u003e 0.0016 , 'Implausibly accurate' )\r\n    assert( worstErrorFraction \u003c 0.016 , 'Implausibly inaccurate' )\r\nend;\r\n\r\n\r\n%% Cross-quadrilateral, centred on origin, in all four quadrants:  moderate N (1)\r\nN = 100;\r\npolygonX = [ 1 -1  1 -1];\r\npolygonY = [-1  1  1 -1];\r\narea_exact = 2;\r\n\r\nfor j = 1 : 3,\r\n    areaVec = arrayfun(@(dummy) monteCarloArea(N, polygonX, polygonY), 1:10);\r\n    assert( length(unique(areaVec)) \u003e 4 , 'Cannot have so many identical outputs')\r\n    worstErrorFraction = max( abs(area_exact - areaVec) ) / area_exact\r\n    assert( worstErrorFraction \u003e 0.05 , 'Implausibly accurate' )\r\n    assert( worstErrorFraction \u003c 0.40 , 'Implausibly inaccurate' )\r\nend;\r\n\r\n%% Cross-quadrilateral, centred on origin, in all four quadrants:  moderate N (2)\r\nN = 10000;\r\nfor j = 1 : 10,\r\n    rVec = 100 * rand(2);\r\n    polygonX = [ 1 -1  1 -1] * rVec(1,1) + rVec(1,2);\r\n    polygonY = [-1  1  1 -1] * rVec(2,1) + rVec(2,2);\r\n    area_exact = 2 * rVec(1,1) * rVec(2,1);\r\n\r\n    areaVec = arrayfun(@(dummy) monteCarloArea(N, polygonX, polygonY), 1:10);\r\n    assert( length(unique(areaVec)) \u003e 6 , 'Cannot have so many identical outputs')\r\n    worstErrorFraction = max( abs(area_exact - areaVec) ) / area_exact\r\n    assert( worstErrorFraction \u003e 0.004 , 'Implausibly accurate' )\r\n    assert( worstErrorFraction \u003c 0.049 , 'Implausibly inaccurate' )\r\nend;\r\n\r\n\r\n%% 12-cornered polygon of unit 'circumradius' centred on origin:  moderate N\r\nN = 1000;\r\npoints = 12;\r\ncentre = [0 0];\r\ncircumradius = 1;\r\npolygonX = circumradius * cos(2 * pi * [0:points-1]/points) + centre(1);\r\npolygonY = circumradius * sin(2 * pi * [0:points-1]/points) + centre(2);\r\narea_exact = polyarea(polygonX, polygonY);\r\n\r\nfor j = 1 : 3,\r\n    areaVec = arrayfun(@(dummy) monteCarloArea(N, polygonX, polygonY), 1:10);\r\n    assert( length(unique(areaVec)) \u003e 5 , 'Cannot have so many identical outputs')\r\n    worstErrorFraction = max( abs(area_exact - areaVec) ) / area_exact\r\n    %assert( worstErrorFraction \u003e 0.02 , 'Implausibly accurate' )\r\n    assert( worstErrorFraction \u003e 0.01 , 'Implausibly accurate' )\r\n    %assert( worstErrorFraction \u003c 0.15 , 'Implausibly inaccurate' )\r\n    assert( worstErrorFraction \u003c 0.08 , 'Implausibly inaccurate' )\r\nend;\r\n\r\n%% P-cornered polygon of arbitrary 'circumradius', with centre offset from  the origin:  moderate N\r\nN = 1000;\r\nfor j = 1 : 10,\r\n    points = randi([5 100]);\r\n    centre = randi([2 100], [1 2]);\r\n    circumradius = randi([2 100]);\r\n    r = rand();\r\n    polygonX = circumradius * cos(2 * pi * (r+[0:points-1])/points) + centre(1);\r\n    polygonY = circumradius * sin(2 * pi * (r+[0:points-1])/points) + centre(2);\r\n    area_exact = polyarea(polygonX, polygonY);\r\n\r\n    areaVec = arrayfun(@(dummy) monteCarloArea(N, polygonX, polygonY), 1:10);\r\n    assert( length(unique(areaVec)) \u003e 5 , 'Cannot have so many identical outputs')\r\n    worstErrorFraction = max( abs(area_exact - areaVec) ) / area_exact\r\n    %assert( worstErrorFraction \u003e 0.02 , 'Implausibly accurate' )\r\n    assert( worstErrorFraction \u003e 0.01 , 'Implausibly accurate' )\r\n    %assert( worstErrorFraction \u003c 0.15 , 'Implausibly inaccurate' )\r\n    assert( worstErrorFraction \u003c 0.08 , 'Implausibly inaccurate' )\r\nend;\r\n\r\n\r\n%% 5-pointed star of unit 'circumradius' centred on origin:  moderate N\r\nN = 1000;\r\npoints = 5;\r\ncentre = [0 0];\r\ncircumradius = 1;\r\nx = circumradius * cos(2 * pi * [0:points-1]/points) + centre(1);\r\ny = circumradius * sin(2 * pi * [0:points-1]/points) + centre(2);\r\npolygonX = x([1:2:end, 2:2:end]);\r\npolygonY = y([1:2:end, 2:2:end]);\r\narea_exact = sqrt(650 - 290* sqrt(5))/4  * ( circumradius / sqrt((5 - sqrt(5))/10) )^2;\r\n% http://mathworld.wolfram.com/Pentagram.html\r\n\r\nfor j = 1 : 3,\r\n    areaVec = arrayfun(@(dummy) monteCarloArea(N, polygonX, polygonY), 1:10);\r\n    assert( length(unique(areaVec)) \u003e 5 , 'Cannot have so many identical outputs')\r\n    worstErrorFraction = max( abs(area_exact - areaVec) ) / area_exact\r\n    %assert( worstErrorFraction \u003e 0.02 , 'Implausibly accurate' )\r\n    assert( worstErrorFraction \u003e 0.03 , 'Implausibly accurate' )\r\n    %assert( worstErrorFraction \u003c 0.15 , 'Implausibly inaccurate' )\r\n    assert( worstErrorFraction \u003c 0.25 , 'Implausibly inaccurate' )\r\nend;\r\n\r\n%% 5-pointed star of arbitrary 'circumradius', with centre offset from  the origin:  moderate N\r\nN = 1000;\r\npoints = 5;\r\nfor j = 1 : 10,\r\n    centre = randi([2 100], [1 2]);\r\n    circumradius = randi([2 100]);\r\n    r = rand();\r\n    x = circumradius * cos(2 * pi * (r+[0:points-1])/points) + centre(1);\r\n    y = circumradius * sin(2 * pi * (r+[0:points-1])/points) + centre(2);\r\n    polygonX = x([1:2:end, 2:2:end]);\r\n    polygonY = y([1:2:end, 2:2:end]);\r\n    area_exact = sqrt(650 - 290* sqrt(5))/4  * ( circumradius / sqrt((5 - sqrt(5))/10) )^2;\r\n    % http://mathworld.wolfram.com/Pentagram.html\r\n\r\n    areaVec = arrayfun(@(dummy) monteCarloArea(N, polygonX, polygonY), 1:10);\r\n    assert( length(unique(areaVec)) \u003e 5 , 'Cannot have so many identical outputs')\r\n    worstErrorFraction = max( abs(area_exact - areaVec) ) / area_exact\r\n    %assert( worstErrorFraction \u003e 0.02 , 'Implausibly accurate' )\r\n    assert( worstErrorFraction \u003e 0.03 , 'Implausibly accurate' )\r\n    %assert( worstErrorFraction \u003c 0.15 , 'Implausibly inaccurate' )\r\n    assert( worstErrorFraction \u003c 0.25 , 'Implausibly inaccurate' )\r\nend;\r\n\r\n\r\n%% P-pointed star of arbitrary 'circumradius', with centre offset from  the origin:  moderate N\r\nN = 1000;\r\nfor j = 1 : 20,\r\n    points = 3 * randi([3 10]) - 1;\r\n    centre = randi([2 100], [1 2]);\r\n    circumradius = randi([2 30]);\r\n    r = rand();\r\n    x = circumradius * cos(2 * pi * (r+[0:points-1])/points) + centre(1);\r\n    y = circumradius * sin(2 * pi * (r+[0:points-1])/points) + centre(2);\r\n    polygonX = x([1:3:end, 2:3:end, 3:3:end]);\r\n    polygonY = y([1:3:end, 2:3:end, 3:3:end]);\r\n    \r\n    area_polyarea = polyarea(polygonX, polygonY);                % Incorrect value\r\n    warning('off', 'MATLAB:polyshape:repairedBySimplify')\r\n    area_polyshapeArea1 = area( polyshape(polygonX, polygonY) ); % Incorrect value\r\n    area_polyshapeArea2 = area( polyshape(polygonX, polygonY, 'Simplify',false) );  % Incorrect value\r\n    \r\n    % REFERENCE:  http://web.sonoma.edu/users/w/wilsonst/papers/stars/a-p/default.html\r\n    % Here: a {points/3} star\r\n    k = 3;\r\n    sideLength = circumradius * sind(180/points) * secd(180*(k-1)/points);\r\n    apothem = circumradius * cosd(180*k/points);\r\n    area_exact = points * sideLength * apothem;                  % Correct value\r\n    fprintf('Area estimates from different methods:  \\r\\npolyarea = %4.1f;  polyshape.area = %4.1f or %4.1f;  geometrical analysis = %4.1f\\r\\n', ...\r\n        area_polyarea, area_polyshapeArea1, area_polyshapeArea2, area_exact);\r\n    \r\n    areaVec = arrayfun(@(dummy) monteCarloArea(N, polygonX, polygonY), 1:10);\r\n    assert( length(unique(areaVec)) \u003e 5 , 'Cannot have so many identical outputs')\r\n    worstErrorFraction = max( abs(area_exact - areaVec) ) / area_exact\r\n    %assert( worstErrorFraction \u003e 0.02 , 'Implausibly accurate' )\r\n    assert( worstErrorFraction \u003e 0.01 , 'Implausibly accurate' )\r\n    assert( worstErrorFraction \u003c 0.15 , 'Implausibly inaccurate' )\r\nend;\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":3,"created_by":64439,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":7,"test_suite_updated_at":"2019-06-29T13:06:05.000Z","rescore_all_solutions":true,"group_id":1,"created_at":"2018-07-02T02:19:05.000Z","updated_at":"2025-09-14T14:22:43.000Z","published_at":"2018-07-02T08:55:01.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.png\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/media/image2.png\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId3\",\"target\":\"/media/image3.png\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe area of a polygon (or any plane shape) can be evaluated by\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/179\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eMonte Carlo integration\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. The process involves 'random' sampling of (x,y) points in the xy plane, and testing whether they fall inside or outside the shape. That is illustrated schematically below for a circle.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e^\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eSteps:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eDefine a 2D region within which to sample points. In the present problem you must choose the rectangular box (aligned to the axes) that bounds the specified polygon.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eBy a 'random' process generate coordinates of a point within the bounding box. In the present problem a basic scheme using the uniform pseudorandom distribution available in MATLAB must be employed. \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOther schemes in use include quasi-random sampling (for greater uniformity of coverage) and stratified sampling (with more attention near the edges of the polygon).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eDetermine\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/198\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ewhether the sampled point is inside or outside the polygon\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eDue to working in double precision, it is extremely unlikely to sample a point falling exactly on the edge of the polygon, and consequently if it does happen it doesn't really matter whether it's counted as inside or outside or null.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eRepeat steps 2–3\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eN\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e times.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eBased upon the proportion of sampled points falling within the polygon, report the approximate area of the polygon.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eInputs to your function will be\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eN\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, the number of points to sample, and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003epolygonX\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u0026amp;\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003epolygonY\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, which together constitute\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/194\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ean ordered list of polygon vertices\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eN\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e will always be a positive integer. \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003epolygonX\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u0026amp;\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003epolygonY\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e will always describe a single, continuous outline; however, the polygon may be self-intersecting.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFor polygons that are self-intersecting, you must find the area of the enclosed point set. In the case of the cross-quadrilateral, it is treated as two simple triangles (cf. three triangles in the first figure below), and the clockwise/counterclockwise ordering of points is irrelevant. A self-intersecting pentagram (left \u0026amp; middle of the second figure below) will therefore have the same area as a concave decagon (right).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId2\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId3\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e^\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eEXAMPLE\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ % Input\\n N = 1000\\n polygonX = [1 0 -1  0]\\n polygonY = [0 1  0 -1]\\n % Output\\n A = 2.036]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eExplanation: the above polygon is a square of side-length √2 centred on the origin, but rotated by 45°. The exact area is hence 2. As the value of\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eN\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is moderate, the estimate by Monte Carlo integration is moderately accurate (an error of 0.036 in this example, corresponding to 509 of the 1000 sampled points falling within the polygon). Of course, if the code were run again then a slightly different value of\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eA\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e would probably be returned, such as\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eA\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e=1.992 (corresponding to 498 of the 1000 sampled points falling within the polygon), due to the random qualities of the technique.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\"},{\"partUri\":\"/media/image2.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\"},{\"partUri\":\"/media/image3.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUAAAACWCAYAAACvgFEsAAA0/klEQVR42u1dB3wUxfffcne5Sy69kt5IJUB6CIQmvRNqaCJVQAQBRUEEAcVKVaQJigXsBQsIP3sXAbErCgoooNj/CneXm/+8u1nYLNfr5m6+n8/7QG53p7y38503u2/fMAwFBQUFBQUFBQUFBQUFBQUFBQUFRfPDbCx/YEFY4vxQ/14sB7Cw1BSy1Ucxlo+wvINlP5bO1EwUzQVfYnmdSCMhuvfJ32ewRGE55EcCPIzlOBbewfNPYTHIUM+utMvSNc7qwxd4ltwfuVjKsbQOEP1TBAH2if7/D7mRM8nfO2VAgCos6gC40T1FgM7qwxc46Mf7gxIghVvgbBCgcEwgwFuxHMHyE5be5Ng2LHpyfD45doocG06WRA8Qz2WkqC5bxwRMw/K7aHAtxfIf+XsxuV7cloXkuJGQ9zg7dVlr+yPEGz6HZQOWk0QHNS722Vq7orG8gWULWdqC511roy9SfQD6k/qgzR9iWYZF6YCuYrHswvI2lk2kHQOs3CPW6gBcLWrT06T/YtjqoxT29G5Nv67cF460ay5pw3tYNpPyz2L514r97ZW5RnQdjKUfiDffh/T9H2KPWEpL/oGUABkJAQ7Fkkz+/7GF4wvJwICbpZTczA+Sc54kxi+yc4yxUnec5O9e5EaRtkU609ury1LbAcJzzzZYssjg+VE08J3tsyUPJAJLPfk/T875zo7XItZHCSl/Nzk2hRy7yQFdXUf+HkT+7oClwYL+7dXB2Fkh2OujFLb0bku/zt4X9tpVS8p4i/y9iPy9xYb9HemrcN1gLGXk/zDukkQ2mUOpSJ4E2IL8bSDPB6XHs0W/XU9++5rMum9i+YzM4LaOOUqASVbaIr3R7dVlqe3CQNSL/v6VnFfkYp8tkRlPBhB4Cw9h+ZNcr3aQAOeT/68nx3qSvw84oKvR5JiReEzQdo0F/durwx4B2usj44TebenX2fvCXrsWSPrdzwoBZjvZV+G6BCLw/y/IsVHk75WUiuRJgHGim+tXOwPgBvLbZtFvcDzMzjFHCdBaW6Q3ur26rA3ePyTlWCNAR/tsicwmk/NvJH9/Rf7WOkiAgsdwnx0CtKYrWPJuJ8s6OG+dBf3bq8MeAdrrI+OE3m3p19n7wl67Fkj63d8KAcY52VfxdXHk/5+RYyPJ36spFTV/Aqwk3oU4ZOM1LBl2jrlLgEdJ2SzxXuzVZYsAHVkCO9pnabvEy6opxHs4Ixkwlq6xtAR+RfTMFJFy7ekKwpu6kv+Xk/N22FgCW6vDHgHa66MzS2Bb+nX2vrDXrvbMxYgIljxntEeAjvSVEqBMX4Q8SW4aMMBLIhKcIbop7yIPhuFGOk+eA4mPP48lXlTu5Yw5zGYfeW4z2sFjjIW6tzvQFuGBNyw9XsByt526bLX9D9HDeHjI/QmWdg5cZ60uS+3KJDf/EbK8OyHxOqTXSPUheCbwrOsx8q/wgsKerhrI+dvJg3d4eF9g4yWIpTos6UI6edrroyUCtKZ3a/p15b5wpF1zSRs+xfKo6Lg1+9srU3zdHVhWkP//SfrxPvn7W4bGUlL4GcJApAhOvYNTMF709yxCTpdTE1EEOm7GomPMbxzXUHUEpd454hXvIHJY9BiCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCQp4oyIgPgWSN8VQVsoY6IVzRHoSRX7ZoiqaIJ2Mqn6pCvuA6Fkc+/dCcgr8OripHNw5P/7FdXsQMqhYZjqb4kJbDOsR/8vqtbfUgQ2rjDyUkhORQzcgPNQURMxeNSP8RxtT2awr+6lAc+RTTNCM7hRxQmh0+59N1FTrDMx2RIAuGpUM6IZqqW2boXxW75/xTdRfsdO7JOtS3PGY31YzsELtoRMYx8Zg6vKb8fNvssNlUNTJDv8qYHWJDgbx/Z6kxIULRk2pHXpgzIPVzqa1m4d+oZuSFpAi+94d3lRmltupdFrODakdmqM6PWH32kdomhtowPQ+SS2ZT7cgLozolvisdVA0dE96hmpEdcrfMzD8rttOvD9eiqrxwmv5ehogcWBX76S8PmUnwjVvbGuqKIx6gapEfWqdrh946Nus3/dMdEcjy0Zm/tcoIH0w1Iz/gMbT9rRVtG2FMncFja0BVHCR7jaCakSfGpsWFoPrcaBSnVUBK9FCqEnlCq+H3tW8d1VhbEtUYGsK/QjUiW4TFRqj0dTUlKBWPLfz3GKoSmYJjmJ1larX+cG4uYi9u40chP2h4nv33zptboTuWFCP4P2N5dzcK/wO2zESTV+5GiVlFeo7j6PM/2Q4qlv13aUIC+r2wELVWq3WceeNmCvlhEMsy6Mj+7iaB/+PfBlK1yNCp4LhHEzIK9XO2HUQdh89GLMfDZEXjNmWIAeD1fYK9PyDAxZgIFSwLO8aFUNXIbVAxD7dtFakznB6IQNoUR+jwbw9RzcgOakx4/1c3bBYCApx054swUYH0p6qR3/J3e6uQEB2QH8jHOTmCsfpS7cgKIQqe/eeWhUVIIMDlC4qQQsH+jY+pqHpkBRg7aOIdL5gIECQutaUez2APUtXICyrs7f29KD4eCQQIUoAJERPjNqoeWQE+qUJfvtftAgHC/8lk1ZuqR1ZuxbbYlFy9QH4g7etnII7j6WQlM/SCAbQfe31iAlyACRETI2xZqKAqks3yd2tRfviF5a8ghXnhsLPaFqoh+TgVQHS1g6cjMQFeseJZYbKiHxjICJvzVCqdmPxA3s/OFozVnapIFlDgpe4fi68rQFICvOnaAlgG08lKPoAxg8bf8nQTAgSJTsqEyWoTVZFcBhX28ubHxSEpAYLkYGLE52ygapIFusGgOvxm10sI8JM3ugiT1WVUTbLAhqjEdJ2U/EBqBk5BHM//TicreaArDJx3sbdniQDnYWLEBHkWn8NTVfkd9+Vmh12y/BUkNysMJqv1VE1+B8/xirM1AyYjSwQ4dunjwmTVharK/7g328LyV5A3s7IEY3WiqvLvoFIq2LMLZuchawR4w6w8WAbTycr/gLGCie4xiwQIEhmfBpPVPVRVfh5U2Lv7dY6V5a8g6UolGGstVZdf0REG1f59na0S4Ed7OwuTVR1Vl1+xNiI2WWeN/ECq+l6Bl8EKSDZCcwP6ER1gwLyOvTxbBDgrNhYpWfY0PpelKvMb1mSkaqwufwVJx+fgc1dTdfkNHCa205V9xiNbBDh68SPCZNWeqsx/WJWKvTtb5AeyLzNTMFY7qjK/gMXL39PzZuQiewQ4d3ouUiq4U3Sy8htgjKBRix6ySYAg4TGJMFnR1Fj+GlR4+XtqJvbu7BHgb1iSFAow1l1UbX5BDQyqd1/uaJcA33mpozBZVVO1+QV3aaPidXO2HrBLgOU9x8Iy+CSdrPyDKhgoe7F3Z48AQabFxCAVy56gxvIL7kxOVOv0pwbaJUA4Jwmfi6+5g6rN904FJrQTZT1G2yU/kJELHxAmq0qqOt/j9gTs1f3mAPmBvJyRIRirnKrOt4NKpeJOXD052y75CTITn4uvOU4nK58DxgYasWCrQwR4zdaPUWhEDExWt1HV+RjYmzs+BXt1vztIgGexxPI8GOtWqj2fogwG1evPdXCYAF97toMwWZVS9fkUt2rCo3VAbI4QIEjby0biZbDyGFWdb9EWBsgL2KtzlABBJkZHwzL4KFWfT3FLXIxKp/t5gMMECOfCNfja5VR9vgMmsqNtug53mPxAhs3fLExWrakGfYdl4M2ddYL8QJ5LTxeM1Yqq0Eeeuor7/srxWQ6TnyBTL8+EZfD3VIM+QwmMjaHXbXSKAK+5/2OkDouAyepmqkLfLX+/uwJ7c787SYC/Yok0L4OXUC36BDDRoFeerHWaAPc8UStMVsVUjT7BEiAyIDRnCBCkdad6xCmU31AV+gZFMDCext6cswQIMjYqCpbBX1E1+gSLoyKVuvM/DXCaAM+dHIDgWlzGTVSNPlj+KpRflXQc7DT5gQyZu16YrAqpJr2PReDF/VJQ4BIBPpmWJhirgKrS68vfL68YleE0+QkyviEdlsFfUE16HTAWUP2ce10iwNlbPkIqTRjswngjVaX3l7+fj8ZenCvkB3IGE6eW48BYC6g2vT+oXni0xmUC3PVIjTBZ5VN1ehULgMCAyFwhQJDi9v2N2Iv8jKrSu4CBgB7DXpyrBAgyIjLSiIn0MFWnV3FDuFah/+9Ef5cJEK4NN+/vfD1Vp1eXv4eLavsZXSU/kEGz1wiTVQ7VqPcwH7y3My4ufwV5NDVVMFY2VanXlr+fjB6aanSV/AQZNSTViMs6RDXqNcAYQAOvXo3cIcBZmz9ASpUaJqtrqUq9t/w9OAx7b+6QH8gpTKCh5mXwPKpV7w2qpx+sRu4S4FMPVNHJyruYB8QFBOYOAYLkV/eCZfDHgaScSBm1JQsGwkPYe3OXAEEGR0QYlSy7X0b9U2IJdfFaSCCqlVFf5oZqeP0/P/Z3mwChDA0uC5c5R0b90zKuJ20NJbaWA0KBsPKrehrdJT+Q/jPugonKyMgrdMl5DivNDGuY1D3p8IZpeT/N6JP8RVWOdqYMOnKNmmUNP7u5/BXkgZQUwVhp/nZsOxRFPrFiXNbRtZNyf+xdFv1GrIZJcfBatiY/fPOiERnf3Tu15YnBNfHv5SRq/R7krVLyHw0bkOL28leQoQOSG5VK9gN/9ysvIaxNPdYx6Bp03i4vciPj4PfKyTGatD4VMW+AjW8Zm3UU2/wxxk9bS7aIUmf0LY95c/WknJ/mDU5DXTq3Q+68ABFkxLQFqKFjonHN5Nw/J/dIPlyaGzbWX7aqzo2YfVXf5C+AwyZ0SzpclqMd4dCFGg2TetPIjGOGZzoiQe6ZmnsqJy7Ur0kEsLf2/sDw8EZPkB/IT/n5KAQTKi76an/2q7YgYs0PW6obBV3/+0Qd6lMWs9eRa6tyw+cfXF12TrhW/3RHNLhd3IeMf5MIwIRi3Lm5EnmKAHdsqkAsa5qsUvzYL3ZIbdx+0LGg7/0ry85V5oQ79BilT3nM//57su7Ctcc2Vze2K4xY5Y+O9K2Ife2cqC1HNlWj+nGT3SK/Cbc8jlZOr0Bi3lg2KuvHKDWT6fPnL7GhlfdNa3la3JaFwzPgE9gWdi9uk6WdeXRzdZOO/N/jHVDLJPXfmDBO+EvwiDaGc5whWaE45ylRsKyRY5h//NmvQVWx58W6BoEJCOYie7YaURf/ovTa9VfmNoaouJ/VIdwJf4hSyf0CjyrSkjUoOyPMI5KKy4IyoWx/9Qt0umF6y0apvoe1j3/RgTGpvrkh85j02v6Vced5heqEj+Xk/CHpBmlbJo3s5hYB1o+biv7a2aFJmSe31aDkWPWfvu5jbovQv8GRELflu01VqFWWAyvZnETNyIOry43ii396oB0anhqNFick+EW6hoUhTFTwVQCEQ8z3oGyFgQVJVf3Vt1FlcUh6M84ekPI148BeCwMqY5+WXrtkdCZaNDcf3XpjkV+kRaIalbeN8ni5ZW2iTGX7q183Yp0uG5N1ia3wUvJpR57Rzh2U+s0l19Zmo8o+V/hUKnpfjmYOzrukH+OG93SLAIdOvhYd31rTpMxP11agNjWdfd7HsopydHp7uyZtwd56Y1a8ZpgjHmTIgKrY/X/saH9hSda/IqYxQ6nUvWFn7w1vSW1oqJ5nmOe94C2HY5Y5vzIpyS/9WpGYiOK0ysaN01temJEPrio7364gwqHdtgqS1J1WXJ51Srj22w2VxqK0UFTfr0Xjr9/08dgS1FE5frgn4jgWbV9f7vGyH7y3DPE8i376vJfP+/XL131MOi1OD0Xfb66+4BxgQvw5L1nTwaFHHfkR6w+tLj9/0VNvaYgODzF2HnUt8sQLCGdk4IhR6NDai6u8jbPL0Oh5d7tV5lXr30Zj+leYVotQJniDw/tWo6s3vu/Tvo1ZsgNFxCXr+lfFGgUvELisf2XsR848c43rURrzwNguif/rVRazI1TJlClZ9n94ydgIXstZH5LENy1bgvcHz3+88kAVE+uLHUNDDb4kvu/y8lBvrdaAl/WNuAlLitPCGkbWxb8wtnPC7qp87UJnnuHlpagvG1ob99zYzol7awsjb8c/9YKlYnKSWv/mrjqfEsX6O9sgvFxEv3/X1+Nln/22D8LLUHTfXW182ifQYUqSWkeW9r06YB2DrkHnOUlqZ/bF5WryI24EGw/vEP9CcWrYKPzbGnhemlPayTD9ntd9RhKQ72/YpFlowqg+aPyo/mjMtas9Uu7UlbvR8JFD0YSGnmh4wwg0be2rPu1Tu4FTEcvxjSzPf6BRMB16l8XsBA7r3iZqG9ZzrNsPgbHMwmRk6BQWZvgKE5MvyGJ1ixZAgHovhuSMB4I9gknJF/15MSMDQSZr2M8E193ZS31KUCnYPdgba7xpXj5yJhefO9KtUzzq0z3Ra+X37paIundO8ElfIIED6A50qODZ3Vin8V6y1QA8aH8Li4zVDb/+fp97g4EgU1ftRWmFVQZMUeAoLcGi8OZLlioVy/4QzfP6J9z8JM0R6YLJFntpe7zYnygg2HWYaL3ZD/h6ZWpMDIKXObg/T0K93n5raZqwOFZf1y5W/8Ohnl4ljNNf9YaXFGjL6lKv1bF5VampjjNf9/ZqX0BXdTWxetAd6NAHb9UTWZbfw7KsEZ5heSIkJVhk8DX3QD5CbCsetr3t6qs3zRF4EO+AFwhTYmKMpz0UmyeV77FXxuNlN65nojc7g+vY1w0TrbfI72BuLipVq/W4nnO4unE+jgooVyrZ7yMjlLpnH6r2GmkA8QE5ARF6k2QVChbdv8Z7JAs6Al2Bzhjf7h9jmrBYltMnZhXpJ96xixKczU/vPkSl3UaCx4fw5PGiFz10mxiHB/W/JWq1bn9OjseJY31yMnhMBk+s3+1gChDtUS8sg7ekpMBndwbsNUNapyI/xbCF8zyzGW6WSWMyjH8d6+dx4oClLyyBvb00vaxjPOrbPcnj5YJOQDegI6KrcD/ZqpLj+aPKEI2+75W3UbKzIFfc9hyKT8/XsRwHDsUUP8e9MvlKlj2sYVn9BkxYniSPnlqtQcGyr/mgDwnwQmKTB9t/Mj8fDY+MBO8VnmGuhVgwGXxNMwx7UH/n52r1h17v4vEXFPASxNsEeO8dbUx1/XbEcy9aQBdYJzrQDdbRUBnYKZzhuIfh3ils17dx5oZ3KfER6TV5OVKo1HjJqwCHQjaf3IVguQ2eb8HXGsc84En9iAlEaV7+TvNFBxQM83ZfD31p8mZWFspSqeBFx5+46EGMvJChUrIfqlScYeXyEo8QCIS9QIjKyc+8H6ICdUBdD93nmVAb0AHoQmX+1C5DZrYaxnH831EJabqxN+8MauKbce+bqGVFN5NDQd6eaxgZojsmrV9TFArdKw5uWG5r6UjCRBJ91PaZeJlqOIGJ19U2/0Zi+yBcCBPqO4z/vzO2wffMEvi8bGDvJIO7LxUG9WmBOtbG+Sw0pa5dLBrct4VbZUCfoe/kEzuvvzl0A5k8r3if4xUGU8zg1gNBR34NCx9E2ugEHZ4MwKEYzMgcCZgAXoHQkvlxcS7HDPbH3hgm03d92O4U8GC3YeJ1pb1ft2yJOoeFGTjzM8v5jOvZQnyJrnjZdzopUa1zZt9esfx5tB/SqHm0+pYSnxHgKuy1hWp4U92uXA99hT5D37EOujQDOynMJM0as9p0NExf93pQEN/F2D7OyPKKt2XsUFiNGdR3CA3Vf+lkzODJi4kKZvmy0ZhwPxwUEWF0ZZ8RCAvCHuSPuJhqpnkhTsGzLwkxg85uYARJD7AXhbwdZiMNU4E6H9tS6WpsnxH3Gd4cxjUzW3XleP60Whupr597b0CT35RVr6DUggo9a+aB5uJQXIIKTCrHYBMjZ9LYP2jO2AxLk1Qft3euMym3Tl+M7UPYOjsZeeVPdHbCmsLz7Pn21TH6Ywd7OEwqwwemoJqKGJ9/nlZdHo1GDEpx+PxvP+qOKkqj9LiPsnhz6M6ExfL8C/AsrLRbQ0DGDA6avRaFhIbrMNn/0AwdikvfaGFP0PRGC2IGTzlALvX+S1aaCcT7iANJVz/OyUGt1WodJr7/GN/H9nkLxbCTW1ioQv/opgq7pPL3D/2QNkyB7lhS7HMCvH1xsaluR5KuQl+gT9A3JjD2GTZNWCzHn0vIKNRPuH1XgMT2fXAhto/jOIgzjmACCKaYwTyVSv9udrbNdPUajgO31y97C2Di/WS4nbT7G5OToY16fO6nTOBtr6nheWYd3ISwp4etmEFIeQ9L0SP7u/ucAKFOqPuZ7dU2n09CH8wDyhSKpAkwWxVDOAiktO895ZbmHdu34lkUl9ZSh0n93wByKC71sDBpfARvW+FtqSVy2WHetxdu2iw/tfGGMExulr5uOXExtg/aB6/iQ5jARb1Cwf7VMjtMd+DVzhYJZsywNFOaKl+TnyClrSPR2OFpFo9Bm3Nx23Ef4M1hfQDbSU3uRRIz+E6zIz94u80rlAZM5rBTY8BvgWoOwcAkAm96pV9fjMTeF/Gs/IWWcDNJv3Pem5mJUpVKHYT54OM9mOBAulLBvqdUmmMG9acuEsy/J/qjqEglWr6gyG8EuGxBoakN/4q23oQ2QluhzbjtEEWQHiS2GgxhIpHxqTpICdUciG/6PW+g3LKujQxrSmJwW4A7FJfgMkwmZ5IVCt1uEjMIXleYebe2hf5sGG7Xl2PI5usQxgPhPBDWg3/fx/guLlFeExbLNPbrkWQQvvWFDc9hovjyvW5+I8Av3r3M1IYXd7S78K0wtBHaysg7ts9bSINwEUgJBeEjU1a+jOrHTEBDRoxAY69f59+3une/hOpHj0f1I0aicQvuQyMXbEPaqHgdxysgzVg3JkgRzzPMy5hcGoFkHjcvf0Hy/NyuxRGYiD/NzUWQK5Ck4/JFVhA5ozP2qE4lxofoXn2mPZowKgO1KozwG/kJUlwQgSaOzkAvP9YOxUar9NBG3NZOQWwnyCQ+S8FzhlFdU9E/JEHp4zdWomETZvqF/CaueBLNGFqKhASlD8wpQSmxaiPL85BmLIEJcoDBFkLSA0w64GV9K4M2tQYi1nIcfIv8c5APKDESeZ59BWIGw0J5dOOcfL8T4MJr8hC0BdqE27YnCD10i+jYKuoN8cZHINc0VJiyqPiaAIcP7Yd0TzdNwT+hWxJ4fkpqqYtoj8WICec3/G93Py/5lgEBYlKGZ5Gx1DRNAF7wStAPfP724yc9/UZ+EBANbSCrhruD3ENvgtGdE/ZJ9/3YMLscTb7rZZ8T4KSGbpfsQbJ6Ug44FvHUUqJJC27kutBQc9gCw9zJ+H7f1AyV+S11Y6VGA8kYzjAObE4UhFjXIlGtz8vRorgYFfJmnkFrAuEvUDe0ISlBDY8o1lKzXESH4sj10o2Bxg+u9su3xENGNqCzj9Q2acvIuoQD1EpNcQ9kUBE2Ldea4+y+JstRX2AK9j7/bRUSov8oJwfBBlDEs6ijpmkCXqFgz94wK88UhDxzcrYpHg9CYlz9NtcZ+eP7vqa6oE6oG9pw/ayWSKkwvZ2nk9VFhHVqFXVo142t0MHVFejqhkp0+Q3++XwONkwa1KcOvbK8DH28qhyN65L0W0l2WDdqItFzQEw+v86Ojb0QdnI4NxdVaDQ62LWN8e43wVE8wzzFkuQNZ0Txf2lKJWzFuZqapwlgQkAf7b0YG/jUA1XwAgIVtNSi/fs6e438oOz8XK2pLgjCFn7/8JVOwmTVgZqnCdaGR8fpR12/EV1139t+T2ww7uYdqKS2F+J4xRn6uOLS53/oVcm2m79gMhJCUDBBPofPifF0vbjcE7E8r3smPf2SwOerMSHj46epsZpgdXqqRiclJ/h+GJ7HQbJS2EfXkxsxQVlQJpQNdVj6Vjk9RQOT1SpqnovPajHRnIZ9gGWV2mrRdmGyqqEmuoiVEGRs7dOz5zMyULxCAdlWfibPCt32OLEsgfCby8LC9N9YyVYDwc/EWNXUROZBpVRwp+ZOz7VKVCQI2ZQe/8Sn7idIhTKgLChTGowtljnTchEJgaGTlRlAMCbCkVUA9NYDKCwqDiarO6mJyKDCxHZyRkyMzeQDsG1lT622UdhLl3E9PU6KkmXfhKSl8Dneb3YSnCYqFGCsO6iZTKiCQfXOSx1tktZ7uzui7IwwlBAXciFI2RWBYGsoA8qCMm2d+/aLdcJkVUnNZMKdQDRyTKBa1n0ULINP0MnKDLhh0R4HM0jfl5yM4Fti+KaYcf574f6Y+P5IVyr1r0mW29YE0l3h+o5TY5lwe1JCiM6aFyYW2LNj5ODUCy8rxJ+r2RM4V3i5AmU4sv8HtAnaxpg/qaLLX0wwQDRy/ARuxA33C5NVGTUVvmHjeV7nTObo97OzUZ5KpeNZ9h98/UgH6gjFy91NoPTLo6IajzuR9h42MifGKg12Q6lU3HEgJme8uG3rykyByuVto9BX79v/bA7OgXPhGrjWmbqumpQN+3scp0PKRCwmopFrpmdNeBRMVrcEvaWwd3VscnS00ynoIW0W5BdkzDGDD+F/w6xUUYK9xa/gG2NX0t0DMcNLElzO8iA3VVvQ9WvPOp86/7O3L0NtWkWicK0CPXivdVJ74J4y0zltSyJN1zhbD3yiRyarNkFuq1uAYIBo5JoIoU2XYXgZrPw+2PkPblS0C3tZrm5E9FBqKgrH5IaJ9AgZpGLM4hnmfLlGo4OwGlfruAITNC4/2I21LC5GpXP17e7/HW8aMwjxfMKxX7/pg4YOSIbP2dB1M1uaznX1bXFstAomq6XBbCggFiAYTxDV1JUvmz5lmz+xK5rY0AONvm6NR8odeu1GYbJqFcy2WhqFvatf3dyG8jNMbtUajR6THdz8EDMYo2CYZ4XYvl8cTHFvTSBEhhirOFgNhZeW30+9PNPtt7qQtCApIQRlpoWaXlyAwP/ht92P17pd/pRxmbAM/jaIxxQQiolg3CUpSLc/vF8t+j+SUAFkxZQyNGHpo+4vg+//2JT2Hrd1cTAvfy+knXJXIIB5VmwsfL9r5Fn2L0ys+p1O7ENir+xwc5quG4PUVJD1Gr20s51H4vq++7g7qq2KQeoQziTtq2PR9wd6eKRseOtMJqv8ILXVIpUmTO+JvULG3rQd7V5a2uQTNv3THdGQEcM94gUWtx+AOIXqs2DlP0h5dUniUXf25F2akIAw+UGojC7ZA3sTi6XB/4la/YmF4VqF/r8T/T1CUqe+7I369kg05e0Dgf8LeQbdFXiDDG3FbV4QlMtfhfLz4g4DjJ4gqFELt6J9y0svSWQwZMQwD21+tEaYrHKC0VY3gld1xs3lKcjneAlcY14Cw2dzsOMXfN72OOzWBmEsnqhDlKsw6DwLvKT8YnxDukcI6vmHayCLs06lZI/hoiuwVML/4Tc45ok6Lh+ZbsRlfh6snnr9nHs9sEHRh6ht1xGoR2k0Ov/UxbRad12RbUzJyDZMvOMFjyyxVepQmKxuCMbl72cNdjYfckTuT0kxZZGG5bSFZ3SwEdN/bdVq/YGcHLeXwVrzMvj6IDNVvulF1SPukRO82LhqUrawQRHsEhguqiOc/GY6x9WXIGKSJZNVbpDZagEQirvL3wm3P4/iMwp0LMf9p1Fx8/tXxe6bOzD1q4ndkz7ITwldhL3ML5UhGn3fabe5TYKFtX2NuLxPgo3/4MZE7jyj+8m8QZFpQGFvD3Yxs7bjVyFeun4Gu7htSk52iwShPky0h4LMVte7u/yF1PUlRRE6nmft7fg1Ds5pjc+Fa9wh27BQHiar+UG2/D1cVNvPreVv7ynLkUKl1uOybO14qGE4DtKPwUZMxpkb3nW5voFXrxImq+xgstV1oZiQTrm4NH0rKwvlqFQ6Bcv+xTi245ewc5YRdnU74UQgtFgeNm/YHlTGwkvJQ6OGpBpdJSP4fhcvoQ0qJQ9f7mQ6UGUmPnc/XAPXulpvQ30qLIMPBtGYgudomFBWu0REsJtcQbu+zu54WA8bMUUlpOvGLn3MpXqv3vQBEC5sgzsnaCyFPbIDQyIijK686IDvd/H1BgXDvMc4v+PXQPgULkup1L3h4KdwFvYs1geRseBTQ1O6K2cJ6Jev+6DBfVvASw4YUEsY5zYoEjZiMtb3a9EIZTlb/5PbqoTtVTOCxFbzYH9g2Fzc6QwtCx9E2ugE2KDIlR0P03le8S6+1gDbW7ry7XFeZXcjr1B+GCz8BzekcTv2ppwhn+/y8lAvrdYgSobg6o5fibC7G7wthhjBs06S4MDwcHgbHCzGmqNR84a/f3Au0embu+pQSpJap1SysO/DZW7U3w3KgLKgTGfaAG1Wh3DgWVwTDIbCBLI/v6qn0dlP0mD3OJbjjJjE9jKu76dimrAYPKay23YyTF/3ulME2G/a7cJklRYMtpodgj24n5xYhr6QkYESFApY8kK6o84eaAMkNpjFMYwBdn37yko6LEuyNSUlaIyFyeeDoQOSGx0lnfM/DUA3zcs3bVCk4NmXGc/s+RCPy9oNZULZUIej7RnSP7kR9+H9IBhTsBIy9ptxp+NfeKzai9IKKg0sy3lyx8NO2BM8FRoRqxt+/RbHl8Eb30O8QgWT1VXBsPx9b0B4eKOjb14hjIU1v+h4Al8e6eHmVKlY9odontc7Go8IxA0EHgTGSoYl6I5NFQ5vUFRXE6vHRKVjPL+FqHnC4lg91AF1OdKmR3HbyRI8OcBtdTWvVBmASBwhnMHXrDN9hcHxymOM59OHRbI8/wTLssbSbg3I0TfSOaVdGrEX+xYT8IMKz1T3O5CU4GBuLoLwFbxUPcfYfnPoLiIwue6AZ12QXOG0Ay9m+mACx0Qe6Ma6Cl5EiL/ZtSawKVJkhCm2D76X9maKo3KoA+pyZCMmaDv0AV83I7CXv4p3csu6NjoS21fabSQJReIg7CjCi80ax3L8uYSMIv3EO3Y59PYZz3PQtqRAttV0yOVn7y3sFkyQoRxnwOd+ga8p9FHbIGbw3xK1WrffTszgxuRk0yd3gWwsvHR8a0CvJJvL37+O9UOjh6aaQ5F4m6FInoSG1IUmjckwQhtstbF/z6RGpYJ9M4DHVAsgjj5Tb7VJMFeseBbFp+fpMCnZC0XyJIo4hfILZYjG0OfKFTbbN2P9W5AkFZ7vTwlYSylY9o1eWq3V5e9Jc2yf6VU8Z97mUO3jJuZjz+6whmX1G2zEDP6A2wkZpQPYWAnwiZqt1FWHXu8CW1LqFQpTKNJQP7RxKNSdn6vVQVtspdiCvkCfAtRWVwJx2Nr0CN7O4uWlAV6UMM4nEXYXeAxfiBlstBUzmFnS3sDyin1MwA4qhmm8zwqxQFhKljm27w987iA/thPin24DD28gXuoey8uz2N5uWq0BtzVQjTUFk0vj2W/7WI/tU3KNeDn6AePfMJMMaIOtmEFItQV9wedODsjlL694LbtNncXl7/R73kAty7s1MiwrhCIp/djUQeaYwTTd2Jt3WiTAHhMW48nK9Hw9JhBtNQm8JimhQBjK4oQEk0elYBh4rpYqk/Z2x97gLykKhc5Suv51LVpAItaANBYmjH29uiYYpGRy5uveCC+LDcSjggGlkENzGXPMYCO0DdoobXePLgkG3Ke9ATim4iH0pNekpZeQycgF2yC2T4+9QwhFkssevGmYsN8Bj9VSzCCEz0BIDj5vfCAuf1/pGhZmEJPI1y1bok74N0Ik8OZQbhtbJ0C7OZJX8KwkLpEzPwcMNGPFcBxr2LyqtAmJQCZo2HNDYd55rYsM290Ft+00tPH155pmrd60qi3iAtOzmMjxfOOMe9+8NLaP5Rox2eyR4dIfNjObD55eenG1YerqfU1IMK2wCi+D+ZcCjf+igeTWYK9JIJAn09IQhJ+oWPZHxrzbmFwhxAzq24eG6r8UxQxCDCG2ZqAZ63KeY41CeipRbJ+R59kX8PE4Gbc9TsGzL0JbxTGD0BfoE+O7h/++uTExwWW0qjEI5DFl5R6Ukl+m93Bsn7dQzfHKH9XaSH393IvZa7qNWwjkDaFUkYFkq3HgLcHWlqdFe3lg8tjJePdVvCdRgZfExyJ5XickcViZlAReYEAZCwikc/s40/L324+6o4rSKD0mPghFmsI0j53xoI1ToM3QdugD9KVTbawB/7YrkJwK8KK6j19kzq03azUKCdXqyD4b5c2kD5HYg30cuABiBiFM58o1+4AAgR9GBYKRwrMTNaOiwxSHajQaw8c5OQjCTDDx/ddMZ+NwsgGTicQ/zc1FPMsYU2NVD8dpFZ2aua0y85M180OUnH7dba3RIxsrUFioQq9ScZbSjDUHFEPboQ/Ql7UrWiPoG/SRcSwpg3zdXHyv4XvuEY7njJPvfhmVdKoXYvs2M03TjDUfB4nj/0vIKNRPuH0XSsop0UdrVR8Dd+Bj2uZppLiQvFGdEj/7cn0l+nZDFRpfl4hiQng99qK+YZr/rl1TMBGeq2oRZlg5IQed3FaDdi9u9V+n4qjnGPk9x7SL2oLwOXdekf3zCdyPfctaox5VsYixnLevuSEC9+ER6Av06dXlbdDxrTXo9suzf2qXHzG7GfaH69QqateeJSX/wT1354RcVJiTbGA5Djz0Sc18TJViEjwSERGmH3NZuokzvri3Eo3skPBZfHxI88vr2LcyZrc4kyzsJdC9bfRJxrE0O80BHW4Zk6UXpwo/tLr8fJss7cxm1o+oG4alHxX34+jmalSQGvpEoKwVC9NCn/phS02TtO7X1ad934wev5jQNjNs9uF1FTpxP5aOzoJHMO0CxFTqHqXRJ8X9O/dkHepTEdP8nrPP6JtySLqXwJyBqUeayXMku8hLUY/7dF3FJfsldG0T/VBz6odGwXTAnpFe2o+B1bHPBAoBDsJ9kfbvlZtb63Hfa5tTPy7D95a0H4fXVCCyVAwEsPMGpR2R9nFGn+Tml4S4vibuVWlHGjomBExmDpWKKdo2K/93cf+Oba5uLM0KbW47xyXcNi6ryaz768O1qCYvYm2g2Kp9YcQ9Zx+pbXIvLhudeYKR9xvtS1CWrV38w/3VRnE/Ns/I+y0kJHD2qRnVMeEDKW8Mbhf3v+bnISVrOswZmHLsn8c7oP+wG3vzqIzjJZnhA5kAQl1R1LZ9y9r8A0Y6sqGqsXub6LeBG5vdWr4o4u6nbyj+Ax5THN9aY+xXEftxc1se2kFk/8rYA/CME/r4xPziP9oXRt7RDPsR0qNt9DvfbaxqNHmxS0v+6VAcuSWQxlSbDG39stEZJ4Az/n6sA5o9IOVoboqmeS7xW0SpM+oKI5a2L4q8NTkuJCB3U2uVET64c0nUqrIsLWQcUTbXfhSmh3TvUhJ1d3luOGS7Dg1AU4VW5oTPgz4Wpqu7NeN+qOBeg3uuKC10YCCOqYxYVWEd5gzgjmiN01nfKSgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgofIlrsEAqpiiqCmorClmjBAvsN3JlsCqgNxZIvf0EkXexxLpZZoUfBlUvUie1lbxtFQx2kgL2z7gTC+Q0nItlOyEeueBIMBMg4BxRQC65OWGznAIse4nhnmXM+318heVmLL8y5j00VjDmjZDisUCC1NssDKq+WBYQ40NZK8mxJVgOSNqxAQvsVHYTlq+x9LDQjtvI9ZAR+CiWPuTaFeT3eYx5O05xnYC2FtovbguycM3touPHsFyH5QXSDrnYappEPyorfbVnq9EW+m/NVo7YCdqx1IKtxHZSWrg/7NnpgIVr5GgnMSBpK2xkHkb+LsJShqUlltewXI9lH7GNJZ3lYYEMTDdgeYqUIdbBRiwfYvmc6PQlUr4lmzCi8QD3wa1Ez1daOV9ad18Hx5ajfZMNAT5Lbp4V5LetWL7AMpPcTJBZ5A1y7ARRWC8yqBjSSUsEmE8GzD3k3GpyLAdLsgXvwEiMCLPk6xbacQW5PhHLY1jus+BZSOuEGfgBC+2vELWli4VrhOMp5MaA4+3JbyEysZVUPyVW+mrPVtU2+i+1lSN2KhFdL7aV1AOU2uohO3ZKtnFPyclOYkBG7u8t/L6FkITghS2xorP7GfNWswJ5WtLbMCx/MubU8wusjGGx1wn3yJvk/yeJni2dL63b0bHlaN9k5QGCe34WSzRRxgfkOKSx2SVSmNDJy4gnwJBjlgjwUSzbsHQiv3WwseSyNrDE7egpun4nUTQj+p0ny0NxnWqJwaUDy1I71ZLju7HchaWG/KaVia2ekegn1kpf7dnqJTv9d9ZOsZLrBVuJ7aS0oPedduzE2Lmn5GInWx5ga8a8P4stkhDrTExCBVb0BlsenMHyIOk7Y8UmYgIU6v5RRIDS86V1Ozq2HO2bbJ4rPU6I7yhxdUEBB4kLuxBLKVnurBC5zNGkc3PIsX1EIcKDdXCXp5Nly3LRQIN/x1ohwEbiSn9FllZFknbMIdcPJOW+R9qRRW6AdVjWS+rsTtx0afuvEbVluoVrhOPDscCmQq+S8xAZyHKw1ZfEuxD0w1rpqz1bvWij/2NdsBMrul5sqzKRnVpZ0Pu1duzE2Lin5GInS88A7yKkBf1bRchQvEz8H1kmWtJZjWgZeqsVHYC97ib9Z0Qem9Qm4iXw54ScfycemaXz8yV1T3dwbDnat+jm8pwwXzSbnsYywksPyA3NuP3BYitqJ4qgsxnM8vcS5n+GeA+exgriWXRppu0PFltRO1FQm1FQUFBQUFBQUFBQUFBQNA/AWxpnd2qHfUvvcqGuKYz5NXigoRxLQoDYyBN2k7udvW0vX9jX27r3tA3lpnMTIMJ7lQPGgeBKiN2ZR35LdXFwFUiUKpTtjRvKWrnifrhahhQQ3rBWBjYS989VG9mym1h3tvRTYGfweMI+7tw/3rSXJ+3rSv/s6d7X5chR5xcAsTtTyf/BCLcw5gh7iAWCTaYhGn8GGUgQFQ5xZ93I4IJ4sQUWOgXBqBCcC/FDlRaU+iyZXTZjGSMapFdJyrRUjnAObFa+iDG/aboaSwZjjq3SSryfqyy0U9yPTNJniEuaLSn/C1HbILbwDnJ8kuQ8YeP0u0l5/rSRuH/jbdgI2g8R/hDTtZJcAzGfCiyzCAGBrfZIBoNYd4KOp5DzphGbcqLzpfq15J1KbeSofW4UlSO1j/Re2c+YP4tbQ871pr3cse8gSTvF97E1e0n1XyQiLmv6t2QzqQ4FG7IWxhl4c/eTciCOb6AN/YvvP7no/AKgsUNEXt1qxhxkCh2OIf8XPAmpByh8vvKYpMxM0umZpMNSAhS+G1wuIUBpmZbKgXM2kv/Dp00QlH0rmSnFga5Cmy21U9yPlWSAAFncIyk/R9S2lcToAAgcTpO0AwCBnp39bCOpB2jNRuJjL4nskSPRz04bHqBQp9SmnUXnS/XLWFhBSNvpqH1CROVI7cNKzp1OzitlLn4H6y17uWPfiZJ2WrqPpfaS6v9KEQFa078lm0l1WCgqRzrOVovO3WVD/9L7Ty46v4AGMssIeJKwOhhlE5YkkRHKyY3JSW7gnZIy4esLCIhMlCjdEQIUl2mpHEvLuheJB8RbIUBpO8X9AMO1J793sjAwxQRYRv6/lxCgtB2LyeD1p43E/Uu3YSNLellC7APR/PPJb89JCNDSPWCPAMX6tUaA4rY4ah9GQoBi+7CScxPIvbQDS1cv28sd+0rbaes+FuxljwAt6d8aAYp1WChZAovH2RoLBGhL/ztlpvMLAJf2ZtHfwrICDPGWaLmyhxjmQaKUEeQ3cLc/FClDcOPXEbaHT5EiLbjeMCNvId4L/B1tocxlFsoRzskQlXkdOZeRLLH2kJtB2s4EUT+yiHs+kdyI4vJHidoG591GyptkpR2bGO98cO+MjaJF/fvSho2E9peRY/Dv80QPoYw5w0cDOVZC7AbHs0W6E+psRx5rTCU25UXnl0j0y1hor9TuvR20j7icMol9GMm5c8k9ByuJPC/byx37StspvY8t2atAov9p5JjWgv6kj6LENpPe41NE5UjHWSFZAoNn+YqFaxkrHCEXnTfBdOItNFf0IF6LP9GW8e5nP3K2kacflgeCvXxpX1f078o14nGWRCZKhjyvbY46bwJlMyW/xcRDDAb9ydVGUk+hOUAZQG1yRf/OXiMdZ+DNrSIe65AA5xgKCgoKCgoKCgoKCgoKCgoKCgoKGeH/AS8924+Oc1GZAAAAAElFTkSuQmCC\"}]}"}],"problem_search":{"errors":[],"problems":[{"id":44694,"title":"Monte Carlo integration:  area of a polygon","description":"The area of a polygon (or any plane shape) can be evaluated by \u003chttps://www.mathworks.com/matlabcentral/cody/problems/179 Monte Carlo integration\u003e.  The process involves 'random' sampling of (x,y) points in the xy plane, and testing whether they fall inside or outside the shape.  That is illustrated schematically below for a circle.  \r\n\r\n\u003c\u003chttps://upload.wikimedia.org/wikipedia/commons/thumb/2/20/MonteCarloIntegrationCircle.svg/247px-MonteCarloIntegrationCircle.svg.png\u003e\u003e\r\n\r\n^\r\n\r\n*Steps:*\r\n\r\n# Define a 2D region within which to sample points.  In the present problem you must choose the rectangular box (aligned to the axes) that bounds the specified polygon.  \r\n# By a 'random' process generate coordinates of a point within the bounding box.  In the present problem a basic scheme using the uniform pseudorandom distribution available in MATLAB must be employed.  _Other schemes in use include quasi-random sampling (for greater uniformity of coverage) and stratified sampling (with more attention near the edges of the polygon)._\r\n# Determine \u003chttps://www.mathworks.com/matlabcentral/cody/problems/198 whether the sampled point is inside or outside the polygon\u003e.  _Due to working in double precision, it is extremely unlikely to sample a point falling exactly on the edge of the polygon, and consequently if it does happen it doesn't really matter whether it's counted as inside or outside or null._  \r\n# Repeat steps 2–3 |N| times.  \r\n# Based upon the proportion of sampled points falling within the polygon, report the approximate area of the polygon.  \r\n\r\nInputs to your function will be |N|, the number of points to sample, and |polygonX| \u0026 |polygonY|, which together constitute \u003chttps://www.mathworks.com/matlabcentral/cody/problems/194 an ordered list of polygon vertices\u003e.  |N| will always be a positive integer.  |polygonX| \u0026 |polygonY| will always describe a single, continuous outline;  however, the polygon may be self-intersecting.  \r\n\r\nFor polygons that are self-intersecting, you must find the area of the enclosed point set. In the case of the cross-quadrilateral, it is treated as two simple triangles (cf. three triangles in the first figure below), and the clockwise/counterclockwise ordering of points is irrelevant.  A self-intersecting pentagram (left \u0026 middle of the second figure below) will therefore have the same area as a concave decagon (right).\r\n\r\n\u003c\u003chttps://upload.wikimedia.org/wikipedia/commons/thumb/0/0f/Complex_polygon.svg/288px-Complex_polygon.svg.png\u003e\u003e\r\n\r\n\u003c\u003chttps://upload.wikimedia.org/wikipedia/commons/thumb/8/80/Pentagram_interpretations.svg/320px-Pentagram_interpretations.svg.png\u003e\u003e\r\n\r\n^\r\n\r\nEXAMPLE\r\n\r\n % Input\r\n N = 1000\r\n polygonX = [1 0 -1  0]\r\n polygonY = [0 1  0 -1]\r\n % Output\r\n A = 2.036\r\n\r\nExplanation:  the above polygon is a square of side-length √2 centred on the origin, but rotated by 45°.  The exact area is hence 2.  As the value of |N| is moderate, the estimate by Monte Carlo integration is moderately accurate (an error of 0.036 in this example, corresponding to 509 of the 1000 sampled points falling within the polygon).  \r\nOf course, if the code were run again then a slightly different value of |A| would probably be returned, such as |A|=1.992 (corresponding to 498 of the 1000 sampled points falling within the polygon), due to the random qualities of the technique.  ","description_html":"\u003cp\u003eThe area of a polygon (or any plane shape) can be evaluated by \u003ca href = \"https://www.mathworks.com/matlabcentral/cody/problems/179\"\u003eMonte Carlo integration\u003c/a\u003e.  The process involves 'random' sampling of (x,y) points in the xy plane, and testing whether they fall inside or outside the shape.  That is illustrated schematically below for a circle.\u003c/p\u003e\u003cimg src = \"https://upload.wikimedia.org/wikipedia/commons/thumb/2/20/MonteCarloIntegrationCircle.svg/247px-MonteCarloIntegrationCircle.svg.png\"\u003e\u003cp\u003e^\u003c/p\u003e\u003cp\u003e\u003cb\u003eSteps:\u003c/b\u003e\u003c/p\u003e\u003col\u003e\u003cli\u003eDefine a 2D region within which to sample points.  In the present problem you must choose the rectangular box (aligned to the axes) that bounds the specified polygon.\u003c/li\u003e\u003cli\u003eBy a 'random' process generate coordinates of a point within the bounding box.  In the present problem a basic scheme using the uniform pseudorandom distribution available in MATLAB must be employed.  \u003ci\u003eOther schemes in use include quasi-random sampling (for greater uniformity of coverage) and stratified sampling (with more attention near the edges of the polygon).\u003c/i\u003e\u003c/li\u003e\u003cli\u003eDetermine \u003ca href = \"https://www.mathworks.com/matlabcentral/cody/problems/198\"\u003ewhether the sampled point is inside or outside the polygon\u003c/a\u003e.  \u003ci\u003eDue to working in double precision, it is extremely unlikely to sample a point falling exactly on the edge of the polygon, and consequently if it does happen it doesn't really matter whether it's counted as inside or outside or null.\u003c/i\u003e\u003c/li\u003e\u003cli\u003eRepeat steps 2–3 \u003ctt\u003eN\u003c/tt\u003e times.\u003c/li\u003e\u003cli\u003eBased upon the proportion of sampled points falling within the polygon, report the approximate area of the polygon.\u003c/li\u003e\u003c/ol\u003e\u003cp\u003eInputs to your function will be \u003ctt\u003eN\u003c/tt\u003e, the number of points to sample, and \u003ctt\u003epolygonX\u003c/tt\u003e \u0026 \u003ctt\u003epolygonY\u003c/tt\u003e, which together constitute \u003ca href = \"https://www.mathworks.com/matlabcentral/cody/problems/194\"\u003ean ordered list of polygon vertices\u003c/a\u003e.  \u003ctt\u003eN\u003c/tt\u003e will always be a positive integer.  \u003ctt\u003epolygonX\u003c/tt\u003e \u0026 \u003ctt\u003epolygonY\u003c/tt\u003e will always describe a single, continuous outline;  however, the polygon may be self-intersecting.\u003c/p\u003e\u003cp\u003eFor polygons that are self-intersecting, you must find the area of the enclosed point set. In the case of the cross-quadrilateral, it is treated as two simple triangles (cf. three triangles in the first figure below), and the clockwise/counterclockwise ordering of points is irrelevant.  A self-intersecting pentagram (left \u0026 middle of the second figure below) will therefore have the same area as a concave decagon (right).\u003c/p\u003e\u003cimg src = \"https://upload.wikimedia.org/wikipedia/commons/thumb/0/0f/Complex_polygon.svg/288px-Complex_polygon.svg.png\"\u003e\u003cimg src = \"https://upload.wikimedia.org/wikipedia/commons/thumb/8/80/Pentagram_interpretations.svg/320px-Pentagram_interpretations.svg.png\"\u003e\u003cp\u003e^\u003c/p\u003e\u003cp\u003eEXAMPLE\u003c/p\u003e\u003cpre\u003e % Input\r\n N = 1000\r\n polygonX = [1 0 -1  0]\r\n polygonY = [0 1  0 -1]\r\n % Output\r\n A = 2.036\u003c/pre\u003e\u003cp\u003eExplanation:  the above polygon is a square of side-length √2 centred on the origin, but rotated by 45°.  The exact area is hence 2.  As the value of \u003ctt\u003eN\u003c/tt\u003e is moderate, the estimate by Monte Carlo integration is moderately accurate (an error of 0.036 in this example, corresponding to 509 of the 1000 sampled points falling within the polygon).  \r\nOf course, if the code were run again then a slightly different value of \u003ctt\u003eA\u003c/tt\u003e would probably be returned, such as \u003ctt\u003eA\u003c/tt\u003e=1.992 (corresponding to 498 of the 1000 sampled points falling within the polygon), due to the random qualities of the technique.\u003c/p\u003e","function_template":"function A = monteCarloArea(N, polygonX, polygonY)\r\n    % Fun starts here\r\nend\r\n\r\n\r\n% Note:  the Test Suite has been designed to account for variability in outputs. \r\n%        Nevertheless, it is possible that on rare occasions a valid submission \r\n%        might fail the Test Suite in one instance.  \r\n%        If your submission has narrowly failed only one of the test cases, \r\n%        then please try resubmitting it, in case it was just due to 'bad luck'.  ","test_suite":"%% No silly stuff\r\n% This Test Suite can be updated if inappropriate 'hacks' are discovered \r\n% in any submitted solutions, so your submission's status may therefore change over time.  \r\n\r\n% BEGIN EDIT (2019-06-29).  \r\n% Ensure only builtin functions will be called.  \r\n! rm -v fileread.m\r\n! rm -v assert.m\r\n% END OF EDIT (2019-06-29).  \r\n\r\nassessFunctionAbsence({'regexp', 'regexpi', 'str2num'}, 'FileName','monteCarloArea.m')\r\n\r\nRE = regexp(fileread('monteCarloArea.m'), '\\w+', 'match');\r\ntabooWords = {'ans', 'area', 'polyarea'};\r\ntestResult = cellfun( @(z) ismember(z, tabooWords), RE );\r\nmsg = ['Please do not do that in your code!' char([10 13]) ...\r\n    'Found: ' strjoin(RE(testResult)) '.' char([10 13]) ...\r\n    'Banned word.' char([10 13])];\r\nassert(~any( testResult ), msg)\r\n\r\n\r\n%% Unit square, in first quadrant\r\nNvec = 1 : 7 : 200;\r\npolygonX = [0 1 1 0];\r\npolygonY = [0 0 1 1];\r\nareaVec = arrayfun(@(N) monteCarloArea(N, polygonX, polygonY), Nvec);\r\narea_correct = 1;\r\nassert( all(areaVec==area_correct) )\r\n\r\n%% 3×3 square, offset from origin, in all four quadrants\r\nNvec = 1 : 19 : 500;\r\npolygonX = [ 1 1 -2 -2];\r\npolygonY = [-1 2  2 -1];\r\nareaVec = arrayfun(@(N) monteCarloArea(N, polygonX, polygonY), Nvec);\r\narea_correct = 9;\r\nassert( all(areaVec==area_correct) )\r\n\r\n\r\n%% Diamond, centred on origin, in all four quadrants:  small N (1)\r\nN = 1;\r\npolygonX = [1 0 -1  0];\r\npolygonY = [0 1  0 -1];\r\narea_valid = [0 4];\r\nareaVec = arrayfun(@(dummy) monteCarloArea(N, polygonX, polygonY), 1:1000);\r\nassert( all( ismember(areaVec, area_valid) ) , 'Invalid areas reported' )\r\nassert( all( ismember(area_valid, areaVec) ) , 'Not all valid areas accessible in your sampling scheme')\r\n\r\n%% Diamond, centred on origin, in all four quadrants:  small N (2)\r\nN = 2;\r\npolygonX = [1 0 -1  0];\r\npolygonY = [0 1  0 -1];\r\narea_valid = [0 2 4];\r\nareaVec = arrayfun(@(dummy) monteCarloArea(N, polygonX, polygonY), 1:1000);\r\nassert( all( ismember(areaVec, area_valid) ) , 'Invalid areas reported' )\r\nassert( all( ismember(area_valid, areaVec) ) , 'Not all valid areas accessible in your sampling scheme')\r\n\r\n%% Diamond, centred on origin, in all four quadrants:  small N (3)\r\nN = 4;\r\npolygonX = [1 0 -1  0];\r\npolygonY = [0 1  0 -1];\r\narea_valid = [0:4];\r\nareaVec = arrayfun(@(dummy) monteCarloArea(N, polygonX, polygonY), 1:1000);\r\nassert( all( ismember(areaVec, area_valid) ) , 'Invalid areas reported' )\r\nassert( all( ismember(area_valid, areaVec) ) , 'Not all valid areas accessible in your sampling scheme')\r\n\r\n%% Diamond, centred on origin, in all four quadrants:  moderate N (1)\r\nN = 100;\r\npolygonX = [1 0 -1  0];\r\npolygonY = [0 1  0 -1];\r\narea_exact = 2;\r\nfor j = 1 : 3,\r\n    areaVec = arrayfun(@(dummy) monteCarloArea(N, polygonX, polygonY), 1:10);\r\n    assert( length(unique(areaVec)) \u003e 4 , 'Cannot have so many identical outputs')\r\n    worstErrorFraction = max( abs(area_exact - areaVec) ) / area_exact\r\n    assert( worstErrorFraction \u003e 0.05 , 'Implausibly accurate' )\r\n    assert( worstErrorFraction \u003c 0.40 , 'Implausibly inaccurate' )\r\nend;\r\n\r\n%% Diamond, centred on origin, in all four quadrants:  moderate N (2)\r\nN = 1000;\r\npolygonX = [1 0 -1  0];\r\npolygonY = [0 1  0 -1];\r\narea_exact = 2;\r\nfor j = 1 : 3,\r\n    areaVec = arrayfun(@(dummy) monteCarloArea(N, polygonX, polygonY), 1:10);\r\n    assert( length(unique(areaVec)) \u003e 5 , 'Cannot have so many identical outputs')\r\n    worstErrorFraction = max( abs(area_exact - areaVec) ) / area_exact\r\n    assert( worstErrorFraction \u003e 0.02 , 'Implausibly accurate' )\r\n    assert( worstErrorFraction \u003c 0.15 , 'Implausibly inaccurate' )\r\nend;\r\n\r\n%% Diamond, centred on origin, in all four quadrants:  moderate N (3)\r\nN = 10000;\r\npolygonX = [1 0 -1  0];\r\npolygonY = [0 1  0 -1];\r\narea_exact = 2;\r\nfor j = 1 : 3,\r\n    areaVec = arrayfun(@(dummy) monteCarloArea(N, polygonX, polygonY), 1:10);\r\n    assert( length(unique(areaVec)) \u003e 6 , 'Cannot have so many identical outputs')\r\n    worstErrorFraction = max( abs(area_exact - areaVec) ) / area_exact\r\n    assert( worstErrorFraction \u003e 0.004 , 'Implausibly accurate' )\r\n    assert( worstErrorFraction \u003c 0.049 , 'Implausibly inaccurate' )\r\nend;\r\n\r\n%% Diamond, centred on origin, in all four quadrants:  large N\r\nN = 100000;\r\npolygonX = [1 0 -1  0];\r\npolygonY = [0 1  0 -1];\r\narea_exact = 2;\r\nfor j = 1 : 3,\r\n    areaVec = arrayfun(@(dummy) monteCarloArea(N, polygonX, polygonY), 1:10);\r\n    assert( length(unique(areaVec)) \u003e 7 , 'Cannot have so many identical outputs')\r\n    worstErrorFraction = max( abs(area_exact - areaVec) ) / area_exact\r\n    assert( worstErrorFraction \u003e 0.0016 , 'Implausibly accurate' )\r\n    assert( worstErrorFraction \u003c 0.016 , 'Implausibly inaccurate' )\r\nend;\r\n\r\n\r\n%% Cross-quadrilateral, centred on origin, in all four quadrants:  moderate N (1)\r\nN = 100;\r\npolygonX = [ 1 -1  1 -1];\r\npolygonY = [-1  1  1 -1];\r\narea_exact = 2;\r\n\r\nfor j = 1 : 3,\r\n    areaVec = arrayfun(@(dummy) monteCarloArea(N, polygonX, polygonY), 1:10);\r\n    assert( length(unique(areaVec)) \u003e 4 , 'Cannot have so many identical outputs')\r\n    worstErrorFraction = max( abs(area_exact - areaVec) ) / area_exact\r\n    assert( worstErrorFraction \u003e 0.05 , 'Implausibly accurate' )\r\n    assert( worstErrorFraction \u003c 0.40 , 'Implausibly inaccurate' )\r\nend;\r\n\r\n%% Cross-quadrilateral, centred on origin, in all four quadrants:  moderate N (2)\r\nN = 10000;\r\nfor j = 1 : 10,\r\n    rVec = 100 * rand(2);\r\n    polygonX = [ 1 -1  1 -1] * rVec(1,1) + rVec(1,2);\r\n    polygonY = [-1  1  1 -1] * rVec(2,1) + rVec(2,2);\r\n    area_exact = 2 * rVec(1,1) * rVec(2,1);\r\n\r\n    areaVec = arrayfun(@(dummy) monteCarloArea(N, polygonX, polygonY), 1:10);\r\n    assert( length(unique(areaVec)) \u003e 6 , 'Cannot have so many identical outputs')\r\n    worstErrorFraction = max( abs(area_exact - areaVec) ) / area_exact\r\n    assert( worstErrorFraction \u003e 0.004 , 'Implausibly accurate' )\r\n    assert( worstErrorFraction \u003c 0.049 , 'Implausibly inaccurate' )\r\nend;\r\n\r\n\r\n%% 12-cornered polygon of unit 'circumradius' centred on origin:  moderate N\r\nN = 1000;\r\npoints = 12;\r\ncentre = [0 0];\r\ncircumradius = 1;\r\npolygonX = circumradius * cos(2 * pi * [0:points-1]/points) + centre(1);\r\npolygonY = circumradius * sin(2 * pi * [0:points-1]/points) + centre(2);\r\narea_exact = polyarea(polygonX, polygonY);\r\n\r\nfor j = 1 : 3,\r\n    areaVec = arrayfun(@(dummy) monteCarloArea(N, polygonX, polygonY), 1:10);\r\n    assert( length(unique(areaVec)) \u003e 5 , 'Cannot have so many identical outputs')\r\n    worstErrorFraction = max( abs(area_exact - areaVec) ) / area_exact\r\n    %assert( worstErrorFraction \u003e 0.02 , 'Implausibly accurate' )\r\n    assert( worstErrorFraction \u003e 0.01 , 'Implausibly accurate' )\r\n    %assert( worstErrorFraction \u003c 0.15 , 'Implausibly inaccurate' )\r\n    assert( worstErrorFraction \u003c 0.08 , 'Implausibly inaccurate' )\r\nend;\r\n\r\n%% P-cornered polygon of arbitrary 'circumradius', with centre offset from  the origin:  moderate N\r\nN = 1000;\r\nfor j = 1 : 10,\r\n    points = randi([5 100]);\r\n    centre = randi([2 100], [1 2]);\r\n    circumradius = randi([2 100]);\r\n    r = rand();\r\n    polygonX = circumradius * cos(2 * pi * (r+[0:points-1])/points) + centre(1);\r\n    polygonY = circumradius * sin(2 * pi * (r+[0:points-1])/points) + centre(2);\r\n    area_exact = polyarea(polygonX, polygonY);\r\n\r\n    areaVec = arrayfun(@(dummy) monteCarloArea(N, polygonX, polygonY), 1:10);\r\n    assert( length(unique(areaVec)) \u003e 5 , 'Cannot have so many identical outputs')\r\n    worstErrorFraction = max( abs(area_exact - areaVec) ) / area_exact\r\n    %assert( worstErrorFraction \u003e 0.02 , 'Implausibly accurate' )\r\n    assert( worstErrorFraction \u003e 0.01 , 'Implausibly accurate' )\r\n    %assert( worstErrorFraction \u003c 0.15 , 'Implausibly inaccurate' )\r\n    assert( worstErrorFraction \u003c 0.08 , 'Implausibly inaccurate' )\r\nend;\r\n\r\n\r\n%% 5-pointed star of unit 'circumradius' centred on origin:  moderate N\r\nN = 1000;\r\npoints = 5;\r\ncentre = [0 0];\r\ncircumradius = 1;\r\nx = circumradius * cos(2 * pi * [0:points-1]/points) + centre(1);\r\ny = circumradius * sin(2 * pi * [0:points-1]/points) + centre(2);\r\npolygonX = x([1:2:end, 2:2:end]);\r\npolygonY = y([1:2:end, 2:2:end]);\r\narea_exact = sqrt(650 - 290* sqrt(5))/4  * ( circumradius / sqrt((5 - sqrt(5))/10) )^2;\r\n% http://mathworld.wolfram.com/Pentagram.html\r\n\r\nfor j = 1 : 3,\r\n    areaVec = arrayfun(@(dummy) monteCarloArea(N, polygonX, polygonY), 1:10);\r\n    assert( length(unique(areaVec)) \u003e 5 , 'Cannot have so many identical outputs')\r\n    worstErrorFraction = max( abs(area_exact - areaVec) ) / area_exact\r\n    %assert( worstErrorFraction \u003e 0.02 , 'Implausibly accurate' )\r\n    assert( worstErrorFraction \u003e 0.03 , 'Implausibly accurate' )\r\n    %assert( worstErrorFraction \u003c 0.15 , 'Implausibly inaccurate' )\r\n    assert( worstErrorFraction \u003c 0.25 , 'Implausibly inaccurate' )\r\nend;\r\n\r\n%% 5-pointed star of arbitrary 'circumradius', with centre offset from  the origin:  moderate N\r\nN = 1000;\r\npoints = 5;\r\nfor j = 1 : 10,\r\n    centre = randi([2 100], [1 2]);\r\n    circumradius = randi([2 100]);\r\n    r = rand();\r\n    x = circumradius * cos(2 * pi * (r+[0:points-1])/points) + centre(1);\r\n    y = circumradius * sin(2 * pi * (r+[0:points-1])/points) + centre(2);\r\n    polygonX = x([1:2:end, 2:2:end]);\r\n    polygonY = y([1:2:end, 2:2:end]);\r\n    area_exact = sqrt(650 - 290* sqrt(5))/4  * ( circumradius / sqrt((5 - sqrt(5))/10) )^2;\r\n    % http://mathworld.wolfram.com/Pentagram.html\r\n\r\n    areaVec = arrayfun(@(dummy) monteCarloArea(N, polygonX, polygonY), 1:10);\r\n    assert( length(unique(areaVec)) \u003e 5 , 'Cannot have so many identical outputs')\r\n    worstErrorFraction = max( abs(area_exact - areaVec) ) / area_exact\r\n    %assert( worstErrorFraction \u003e 0.02 , 'Implausibly accurate' )\r\n    assert( worstErrorFraction \u003e 0.03 , 'Implausibly accurate' )\r\n    %assert( worstErrorFraction \u003c 0.15 , 'Implausibly inaccurate' )\r\n    assert( worstErrorFraction \u003c 0.25 , 'Implausibly inaccurate' )\r\nend;\r\n\r\n\r\n%% P-pointed star of arbitrary 'circumradius', with centre offset from  the origin:  moderate N\r\nN = 1000;\r\nfor j = 1 : 20,\r\n    points = 3 * randi([3 10]) - 1;\r\n    centre = randi([2 100], [1 2]);\r\n    circumradius = randi([2 30]);\r\n    r = rand();\r\n    x = circumradius * cos(2 * pi * (r+[0:points-1])/points) + centre(1);\r\n    y = circumradius * sin(2 * pi * (r+[0:points-1])/points) + centre(2);\r\n    polygonX = x([1:3:end, 2:3:end, 3:3:end]);\r\n    polygonY = y([1:3:end, 2:3:end, 3:3:end]);\r\n    \r\n    area_polyarea = polyarea(polygonX, polygonY);                % Incorrect value\r\n    warning('off', 'MATLAB:polyshape:repairedBySimplify')\r\n    area_polyshapeArea1 = area( polyshape(polygonX, polygonY) ); % Incorrect value\r\n    area_polyshapeArea2 = area( polyshape(polygonX, polygonY, 'Simplify',false) );  % Incorrect value\r\n    \r\n    % REFERENCE:  http://web.sonoma.edu/users/w/wilsonst/papers/stars/a-p/default.html\r\n    % Here: a {points/3} star\r\n    k = 3;\r\n    sideLength = circumradius * sind(180/points) * secd(180*(k-1)/points);\r\n    apothem = circumradius * cosd(180*k/points);\r\n    area_exact = points * sideLength * apothem;                  % Correct value\r\n    fprintf('Area estimates from different methods:  \\r\\npolyarea = %4.1f;  polyshape.area = %4.1f or %4.1f;  geometrical analysis = %4.1f\\r\\n', ...\r\n        area_polyarea, area_polyshapeArea1, area_polyshapeArea2, area_exact);\r\n    \r\n    areaVec = arrayfun(@(dummy) monteCarloArea(N, polygonX, polygonY), 1:10);\r\n    assert( length(unique(areaVec)) \u003e 5 , 'Cannot have so many identical outputs')\r\n    worstErrorFraction = max( abs(area_exact - areaVec) ) / area_exact\r\n    %assert( worstErrorFraction \u003e 0.02 , 'Implausibly accurate' )\r\n    assert( worstErrorFraction \u003e 0.01 , 'Implausibly accurate' )\r\n    assert( worstErrorFraction \u003c 0.15 , 'Implausibly inaccurate' )\r\nend;\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":3,"created_by":64439,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":7,"test_suite_updated_at":"2019-06-29T13:06:05.000Z","rescore_all_solutions":true,"group_id":1,"created_at":"2018-07-02T02:19:05.000Z","updated_at":"2025-09-14T14:22:43.000Z","published_at":"2018-07-02T08:55:01.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.png\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/media/image2.png\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId3\",\"target\":\"/media/image3.png\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe area of a polygon (or any plane shape) can be evaluated by\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/179\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eMonte Carlo integration\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. The process involves 'random' sampling of (x,y) points in the xy plane, and testing whether they fall inside or outside the shape. That is illustrated schematically below for a circle.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e^\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eSteps:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eDefine a 2D region within which to sample points. In the present problem you must choose the rectangular box (aligned to the axes) that bounds the specified polygon.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eBy a 'random' process generate coordinates of a point within the bounding box. In the present problem a basic scheme using the uniform pseudorandom distribution available in MATLAB must be employed. \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOther schemes in use include quasi-random sampling (for greater uniformity of coverage) and stratified sampling (with more attention near the edges of the polygon).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eDetermine\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/198\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ewhether the sampled point is inside or outside the polygon\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eDue to working in double precision, it is extremely unlikely to sample a point falling exactly on the edge of the polygon, and consequently if it does happen it doesn't really matter whether it's counted as inside or outside or null.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eRepeat steps 2–3\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eN\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e times.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eBased upon the proportion of sampled points falling within the polygon, report the approximate area of the polygon.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eInputs to your function will be\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eN\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, the number of points to sample, and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003epolygonX\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u0026amp;\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003epolygonY\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, which together constitute\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/194\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ean ordered list of polygon vertices\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eN\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e will always be a positive integer. \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003epolygonX\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u0026amp;\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003epolygonY\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e will always describe a single, continuous outline; however, the polygon may be self-intersecting.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFor polygons that are self-intersecting, you must find the area of the enclosed point set. In the case of the cross-quadrilateral, it is treated as two simple triangles (cf. three triangles in the first figure below), and the clockwise/counterclockwise ordering of points is irrelevant. A self-intersecting pentagram (left \u0026amp; middle of the second figure below) will therefore have the same area as a concave decagon (right).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId2\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId3\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e^\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eEXAMPLE\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ % Input\\n N = 1000\\n polygonX = [1 0 -1  0]\\n polygonY = [0 1  0 -1]\\n % Output\\n A = 2.036]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eExplanation: the above polygon is a square of side-length √2 centred on the origin, but rotated by 45°. The exact area is hence 2. As the value of\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eN\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is moderate, the estimate by Monte Carlo integration is moderately accurate (an error of 0.036 in this example, corresponding to 509 of the 1000 sampled points falling within the polygon). Of course, if the code were run again then a slightly different value of\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eA\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e would probably be returned, such as\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eA\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e=1.992 (corresponding to 498 of the 1000 sampled points falling within the polygon), due to the random qualities of the technique.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\"},{\"partUri\":\"/media/image2.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\"},{\"partUri\":\"/media/image3.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\"}]}"}],"term":"tag:\"self-intersecting polygons\"","current_player_id":null,"fields":[{"name":"page","type":"integer","callback":null,"default":1,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"per_page","type":"integer","callback":null,"default":50,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"sort","type":"string","callback":null,"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"body","type":"text","callback":null,"default":"*:*","directive":null,"facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":false},{"name":"group","type":"string","callback":null,"default":null,"directive":"group","facet":true,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"difficulty_rating_bin","type":"string","callback":null,"default":null,"directive":"difficulty_rating_bin","facet":true,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"id","type":"integer","callback":null,"default":null,"directive":"id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"tag","type":"string","callback":null,"default":null,"directive":"tag","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"product","type":"string","callback":null,"default":null,"directive":"product","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"created_at","type":"timeframe","callback":{},"default":null,"directive":"created_at","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"profile_id","type":"integer","callback":null,"default":null,"directive":"author_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"created_by","type":"string","callback":null,"default":null,"directive":"author","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"player_id","type":"integer","callback":null,"default":null,"directive":"solver_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"player","type":"string","callback":null,"default":null,"directive":"solver","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"solvers_count","type":"integer","callback":null,"default":null,"directive":"solvers_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"comments_count","type":"integer","callback":null,"default":null,"directive":"comments_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"likes_count","type":"integer","callback":null,"default":null,"directive":"likes_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"leader_id","type":"integer","callback":null,"default":null,"directive":"leader_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"leading_solution","type":"integer","callback":null,"default":null,"directive":"leading_solution","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true}],"filters":[{"name":"asset_type","type":"string","callback":null,"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":"\"cody:problem\"","prepend":true},{"name":"profile_id","type":"integer","callback":{},"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":"author_id","static":null,"prepend":true}],"query":{"params":{"per_page":50,"term":"tag:\"self-intersecting polygons\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"self-intersecting polygons\"","","\"","self-intersecting polygons","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f17e0364ee0\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f17e0364e40\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f17e0364580\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f17e0365160\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f17e03650c0\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f17e0365020\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f17e0364f80\u003e":"tag:\"self-intersecting polygons\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f17e0364f80\u003e":"tag:\"self-intersecting polygons\""},"queried_facets":{}},"query_backend":{"connection":{"configuration":{"index_url":"http://index-op-v2/solr/","query_url":"http://search-op-v2/solr/","direct_access_index_urls":["http://index-op-v2/solr/"],"direct_access_query_urls":["http://search-op-v2/solr/"],"timeout":10,"vhost":"search","exchange":"search.topic","heartbeat":30,"pre_index_mode":false,"host":"rabbitmq-eks","port":5672,"username":"cody-search","password":"78X075ddcV44","virtual_host":"search","indexer":"amqp","http_logging":"true","core":"cody"},"query_connection":{"uri":"http://search-op-v2/solr/cody/","proxy":null,"connection":{"parallel_manager":null,"headers":{"User-Agent":"Faraday v1.0.1"},"params":{},"options":{"params_encoder":"Faraday::FlatParamsEncoder","proxy":null,"bind":null,"timeout":null,"open_timeout":null,"read_timeout":null,"write_timeout":null,"boundary":null,"oauth":null,"context":null,"on_data":null},"ssl":{"verify":true,"ca_file":null,"ca_path":null,"verify_mode":null,"cert_store":null,"client_cert":null,"client_key":null,"certificate":null,"private_key":null,"verify_depth":null,"version":null,"min_version":null,"max_version":null},"default_parallel_manager":null,"builder":{"adapter":{"name":"Faraday::Adapter::NetHttp","args":[],"block":null},"handlers":[{"name":"Faraday::Response::RaiseError","args":[],"block":null}],"app":{"app":{"ssl_cert_store":{"verify_callback":null,"error":null,"error_string":null,"chain":null,"time":null},"app":{},"connection_options":{},"config_block":null}}},"url_prefix":"http://search-op-v2/solr/cody/","manual_proxy":false,"proxy":null},"update_format":"RSolr::JSON::Generator","update_path":"update","options":{"url":"http://search-op-v2/solr/cody"}}},"query":{"params":{"per_page":50,"term":"tag:\"self-intersecting polygons\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"self-intersecting polygons\"","","\"","self-intersecting polygons","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f17e0364ee0\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f17e0364e40\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f17e0364580\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f17e0365160\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f17e03650c0\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f17e0365020\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f17e0364f80\u003e":"tag:\"self-intersecting polygons\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f17e0364f80\u003e":"tag:\"self-intersecting polygons\""},"queried_facets":{}},"options":{"fields":["id","difficulty_rating"]},"join":" "},"results":[{"id":44694,"difficulty_rating":"medium"}]}}