{"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":45196,"title":"Determine whether a given point is inside or outside a polygon","description":"A closed polygon may be described by an N x 2 array of nodes, where the last node and the first node are the same. Each row of the array is a 2-element vector giving the x and y coordinates of a node. The polygon is described by straight-line segments that go from node to node.\r\nIn this problem, we provide you with a polygon p of this type, and with a number of points r, each having an x and y coordinate. You are to determine whether each point falls inside or outside the polygon. If the point is inside the polygon, return the value 1. If outside, return the value 0.\r\nHINT: One way to solve this is to find a point 'p_test' that is outside of the polygon, and then to count the number of times that a line from 'r' to 'p_test' crosses the sides of the polygon.","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.4333px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 186px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 93px; transform-origin: 407px 93px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 63px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 31.5px; text-align: left; transform-origin: 384px 31.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 384px 8px; transform-origin: 384px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eA closed polygon may be described by an N x 2 array of nodes, where the last node and the first node are the same. Each row of the array is a 2-element vector giving the x and y coordinates of a node. The polygon is described by straight-line segments that go from node to node.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 63px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 31.5px; text-align: left; transform-origin: 384px 31.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 361px 8px; transform-origin: 361px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eIn this problem, we provide you with a polygon p of this type, and with a number of points r, each having an x and y coordinate. You are to determine whether each point falls inside or outside the polygon. If the point is inside the polygon, return the value 1. If outside, return the value 0.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 21px; text-align: left; transform-origin: 384px 21px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 380.5px 8px; transform-origin: 380.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eHINT: One way to solve this is to find a point 'p_test' that is outside of the polygon, and then to count the number of times that a line from 'r' to 'p_test' crosses the sides of the polygon.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function InOut = inOrOut(p,r)\r\n% inOrOut() Determines whether point r is inside (InOut = 1) or \r\n% outside (InOut = 0) polygon p\r\n    InOut = 0;\r\nend\r\n","test_suite":"p = [0,0; 0,100; 5,10; 10,100; 15,20; 20,100; 25,30; 30,100; ...\r\n    35,40; 40,100; 45,50; 50,100; 50,0; 0,0];\r\n%%\r\nr = [44.28, 60.99];\r\np = [0,0; 0,100; 5,10; 10,100; 15,20; 20,100; 25,30; 30,100; ...\r\n    35,40; 40,100; 45,50; 50,100; 50,0; 0,0];\r\ny_correct = 0;\r\nassert(inOrOut(p,r) == y_correct);\r\n%%\r\nr = [38.33, 57.67];\r\ny_correct = 1;\r\nassert(inOrOut(p,r) == y_correct);\r\n%%\r\nr = [0.98, 23.99];\r\ny_correct = 1;\r\nassert(inOrOut(p,r) == y_correct);\r\n%%\r\nr = [27.07, 95.94];\r\ny_correct = 0;\r\nassert(inOrOut(p,r) == y_correct);\r\n%%\r\nr = [ -7.45, 7.14];\r\ny_correct = 0;\r\nassert(inOrOut(p,r) == y_correct);\r\n%%\r\nr = [43.19, 2.87];\r\ny_correct = 1;\r\nassert(inOrOut(p,r) == y_correct);\r\n%%\r\nr = [19.39, 16.79];\r\ny_correct = 1;\r\nassert(inOrOut(p,r) == y_correct);\r\n%%\r\nr = [48.72, 71.27];\r\ny_correct = 1;\r\nassert(inOrOut(p,r) == y_correct);\r\n%%\r\nr = [-6.42, 68.20];\r\ny_correct = 0;\r\nassert(inOrOut(p,r) == y_correct);\r\n%%\r\nr = [20.03, 47.11];\r\ny_correct = 1;\r\nassert(inOrOut(p,r) == y_correct);\r\n","published":true,"deleted":false,"likes_count":4,"comments_count":2,"created_by":8580,"edited_by":223089,"edited_at":"2022-09-09T08:55:17.000Z","deleted_by":null,"deleted_at":null,"solvers_count":33,"test_suite_updated_at":"2022-09-09T08:55:17.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2019-11-06T23:11:51.000Z","updated_at":"2026-01-23T09:40:37.000Z","published_at":"2019-11-06T23:20:58.000Z","restored_at":null,"restored_by":null,"spam":null,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eA closed polygon may be described by an N x 2 array of nodes, where the last node and the first node are the same. Each row of the array is a 2-element vector giving the x and y coordinates of a node. The polygon is described by straight-line segments that go from node to node.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIn this problem, we provide you with a polygon p of this type, and with a number of points r, each having an x and y coordinate. You are to determine whether each point falls inside or outside the polygon. If the point is inside the polygon, return the value 1. If outside, return the value 0.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eHINT: One way to solve this is to find a point 'p_test' that is outside of the polygon, and then to count the number of times that a line from 'r' to 'p_test' crosses the sides of the polygon.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":1720,"title":"Do the line-segments intersect?","description":"You are given two line segments. Do they cross?\r\nConsider one segment as (x1,y1) to (x2,y2), the other segment as (x3,y3) to (x4,y4). You are given a = [x1 y1; x2 y2]; b = [x3 y3; x4 y4]. Return tf=true if a and b intersect or tf=false if a and b do not touch.\r\nWhen lines do intersect they will do so cleanly at exactly one non-endpoint. That is, they will not nest, overlap, or \"kiss\" at the endpoints.\r\nExamples\r\n a = [0,0; 1,1];\r\n b = [0,1; 1,0];\r\n tf = true\r\n\r\n a = [0,0; 1,0];\r\n b = [0,1; 1,1];\r\n tf = false","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.4333px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 306.033px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 153.017px; transform-origin: 407px 153.017px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 153px 8px; transform-origin: 153px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eYou are given two line segments. Do they cross?\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 21px; text-align: left; transform-origin: 384px 21px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 380.5px 8px; transform-origin: 380.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eConsider one segment as (x1,y1) to (x2,y2), the other segment as (x3,y3) to (x4,y4). You are given a = [x1 y1; x2 y2]; b = [x3 y3; x4 y4]. Return tf=true if a and b intersect or tf=false if a and b do not touch.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 21px; text-align: left; transform-origin: 384px 21px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 382px 8px; transform-origin: 382px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWhen lines do intersect they will do so cleanly at exactly one non-endpoint. That is, they will not nest, overlap, or \"kiss\" at the endpoints.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 30px 8px; transform-origin: 30px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eExamples\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 143.033px; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-end-end-radius: 4px; border-end-start-radius: 4px; border-start-end-radius: 4px; border-start-start-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; margin-block-end: 10px; margin-block-start: 10px; margin-bottom: 10px; margin-inline-end: 3px; margin-inline-start: 3px; margin-left: 3px; margin-right: 3px; margin-top: 10px; perspective-origin: 404px 71.5167px; transform-origin: 404px 71.5167px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 64px 8.5px; tab-size: 4; transform-origin: 64px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e a = [0,0; 1,1];\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 64px 8.5px; tab-size: 4; transform-origin: 64px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e b = [0,1; 1,0];\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 40px 8.5px; tab-size: 4; transform-origin: 40px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e tf = true\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 8.5px; tab-size: 4; transform-origin: 0px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 64px 8.5px; tab-size: 4; transform-origin: 64px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e a = [0,0; 1,0];\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 64px 8.5px; tab-size: 4; transform-origin: 64px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e b = [0,1; 1,1];\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 44px 8.5px; tab-size: 4; transform-origin: 44px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e tf = false\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function tf = intersecting(a,b)\r\n  tf = [];\r\nend","test_suite":"%%\r\na = [0,0; 1,1];\r\nb = [0,1; 1,0];\r\ntf_correct = true;\r\nassert(isequal(intersecting(a,b),tf_correct ))\r\n\r\n%%\r\na = [0,0; 1,1];\r\nb = [1,0; 0,1];\r\ntf_correct = true;\r\nassert(isequal(intersecting(a,b),tf_correct ))\r\n\r\n%%\r\na = [0,0; 1,0];\r\nb = [0,1; 1,1];\r\ntf_correct = false;\r\nassert(isequal(intersecting(a,b),tf_correct ))\r\n\r\n%%\r\na = [0,0; 1,0];\r\nb = [2,0; 3,0];\r\ntf_correct = false;\r\nassert(isequal(intersecting(a,b),tf_correct ))\r\n\r\n%%\r\na = [4 3;6 8];\r\nb = [3 7;6 9];\r\ntf_correct = false;\r\nassert(isequal(intersecting(a,b),tf_correct ))\r\n\r\n%%\r\na = [6 2;6 9];\r\nb = [7 6;4 5];\r\ntf_correct = true;\r\nassert(isequal(intersecting(a,b),tf_correct ))\r\n\r\n%%\r\na = [3 -3;-2 -2];\r\nb = [-1 1;0 -4];\r\ntf_correct = true;\r\nassert(isequal(intersecting(a,b),tf_correct ))\r\n\r\n","published":true,"deleted":false,"likes_count":2,"comments_count":5,"created_by":7,"edited_by":223089,"edited_at":"2022-07-11T06:33:54.000Z","deleted_by":null,"deleted_at":null,"solvers_count":77,"test_suite_updated_at":"2022-07-11T06:33:54.000Z","rescore_all_solutions":false,"group_id":26,"created_at":"2013-07-16T20:37:41.000Z","updated_at":"2026-02-19T10:15:21.000Z","published_at":"2013-07-16T20:57:36.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYou are given two line segments. Do they cross?\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eConsider one segment as (x1,y1) to (x2,y2), the other segment as (x3,y3) to (x4,y4). You are given a = [x1 y1; x2 y2]; b = [x3 y3; x4 y4]. Return tf=true if a and b intersect or tf=false if a and b do not touch.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWhen lines do intersect they will do so cleanly at exactly one non-endpoint. That is, they will not nest, overlap, or \\\"kiss\\\" at the endpoints.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eExamples\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[ a = [0,0; 1,1];\\n b = [0,1; 1,0];\\n tf = true\\n\\n a = [0,0; 1,0];\\n b = [0,1; 1,1];\\n tf = false]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":2220,"title":"Wayfinding 3 - passed areas","description":"This is the third part of a series of assignments about wayfinding. The final goal of this series is to be able to calculate the fastest route through a terrain of areas with different properties. The assignments will build on top of each other, gradually increasing the complexity, but guiding you stepwise towards the final goal. You can re-use code from preceding assignments to save some work. See \u003chttp://www.mathworks.com/matlabcentral/cody/problems/2218-wayfinding-1-crossing [1]\u003e\r\n\u003chttp://www.mathworks.nl/matlabcentral/cody/problems/2219-wayfinding-2-traversing [2]\u003e . \r\n\r\n*Which areas are traversed?*\r\n\r\n\u003c\u003chttp://i58.tinypic.com/263wzdt.png\u003e\u003e\r\n\r\nFor this third assignment in this series you have to calculate which areas are traversed and in which order, while going from A to B. Our path from A to B is a straight line. And the area boundaries are closed polygons consisting of a finite number of straight segments.\r\n\r\nIn this assignments, the areas do not overlap. If an area is crossed twice, it is listed twice in the returned vector. And if |AB| crosses first for example area |F2|, then |F3|, and then |F2| again, the output vector should contain |[ ... 2 3 2 ... ]|. Simple.\r\n\r\nThe inputs of the function |WayfindingPassed(AB,F)| are a matrix |AB| of two columns, each with x-y coordinates, of our straight path from A (1st column) to B (2nd column), and a cell array |F| of 2-D matrices with columns with x- and y-coordinates, each column a subsequent node of the polygon boundary of the area. The last node is implicitly connected to the first. The index of each area, to be referred to in the output vector, is equal to its position in the cell array F. \r\n\r\n AB = [\r\n   xA xB\r\n   yA yB\r\n ]\r\n\r\n F = {\r\n  [ x11 x12 ... x1n ;\r\n    y11 y12 ... y1n ]\r\n  [ x21 x22 ... x2n ;\r\n    y21 y22 ... y2n ]\r\n }\r\n\r\n\r\nYour output |v| will contain the indices in |F| of the crossed areas, in the correct order. In the example above, the correct answer is |[ 3 4 4 1 1]|. Crossing means 'being present in that area', so if A, the start, is in area 3, it is considered as 'crossed'. If you pass the same area multiple times, and leave it in between, each event is listed.\r\n","description_html":"\u003cp\u003eThis is the third part of a series of assignments about wayfinding. The final goal of this series is to be able to calculate the fastest route through a terrain of areas with different properties. The assignments will build on top of each other, gradually increasing the complexity, but guiding you stepwise towards the final goal. You can re-use code from preceding assignments to save some work. See \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/2218-wayfinding-1-crossing\"\u003e[1]\u003c/a\u003e \u003ca href = \"http://www.mathworks.nl/matlabcentral/cody/problems/2219-wayfinding-2-traversing\"\u003e[2]\u003c/a\u003e .\u003c/p\u003e\u003cp\u003e\u003cb\u003eWhich areas are traversed?\u003c/b\u003e\u003c/p\u003e\u003cimg src = \"http://i58.tinypic.com/263wzdt.png\"\u003e\u003cp\u003eFor this third assignment in this series you have to calculate which areas are traversed and in which order, while going from A to B. Our path from A to B is a straight line. And the area boundaries are closed polygons consisting of a finite number of straight segments.\u003c/p\u003e\u003cp\u003eIn this assignments, the areas do not overlap. If an area is crossed twice, it is listed twice in the returned vector. And if \u003ctt\u003eAB\u003c/tt\u003e crosses first for example area \u003ctt\u003eF2\u003c/tt\u003e, then \u003ctt\u003eF3\u003c/tt\u003e, and then \u003ctt\u003eF2\u003c/tt\u003e again, the output vector should contain \u003ctt\u003e[ ... 2 3 2 ... ]\u003c/tt\u003e. Simple.\u003c/p\u003e\u003cp\u003eThe inputs of the function \u003ctt\u003eWayfindingPassed(AB,F)\u003c/tt\u003e are a matrix \u003ctt\u003eAB\u003c/tt\u003e of two columns, each with x-y coordinates, of our straight path from A (1st column) to B (2nd column), and a cell array \u003ctt\u003eF\u003c/tt\u003e of 2-D matrices with columns with x- and y-coordinates, each column a subsequent node of the polygon boundary of the area. The last node is implicitly connected to the first. The index of each area, to be referred to in the output vector, is equal to its position in the cell array F.\u003c/p\u003e\u003cpre\u003e AB = [\r\n   xA xB\r\n   yA yB\r\n ]\u003c/pre\u003e\u003cpre\u003e F = {\r\n  [ x11 x12 ... x1n ;\r\n    y11 y12 ... y1n ]\r\n  [ x21 x22 ... x2n ;\r\n    y21 y22 ... y2n ]\r\n }\u003c/pre\u003e\u003cp\u003eYour output \u003ctt\u003ev\u003c/tt\u003e will contain the indices in \u003ctt\u003eF\u003c/tt\u003e of the crossed areas, in the correct order. In the example above, the correct answer is \u003ctt\u003e[ 3 4 4 1 1]\u003c/tt\u003e. Crossing means 'being present in that area', so if A, the start, is in area 3, it is considered as 'crossed'. If you pass the same area multiple times, and leave it in between, each event is listed.\u003c/p\u003e","function_template":"function f = WayfindingPassed(AB,F)\r\n  f = 1:length(F);\r\nend","test_suite":"    %%\r\n\r\n    AB = [ 2 -2 ; 8 -6 ];\r\n    F{1} = [\r\n        -4   -4    4    4\r\n        -4   -0   -0   -4\r\n        ];\r\n    F{2} = [\r\n        -4   -4    4    4\r\n        2    6    6    2\r\n        ];\r\n    f = WayfindingPassed(AB,F);\r\n    f_correct = [2 1];\r\n    assert(isequal(f,f_correct));\r\n    \r\n    %%\r\n\r\n    AB = [ 8 -4 ; 8 -8 ];\r\n    F{1} = [\r\n        -6    2    2   -4   -4    8    8   -6\r\n        -6   -6   -4   -4    2    2    4    4\r\n        ];\r\n    F{2} = [\r\n        -2   -2    4    4\r\n        -0   -2   -2   -0\r\n        ];\r\n    f = WayfindingPassed(AB,F);\r\n    f_correct = [ 1 2 1 ];\r\n    assert(isequal(f,f_correct));\r\n    \r\n    %%\r\n\r\n    AB = [ -8 8 ; 8 -8 ];\r\n    F{1} = [\r\n        -2   -2    0    0\r\n        -0    2    2   -0\r\n        ];\r\n    F{2} = [\r\n        2    4    4   -6   -6   -4    2    4    4    2    2   -4   -4    2\r\n        -0   -0   -6   -6    4    6    6    4    2    2    4    4   -4   -4\r\n        ];\r\n    F{3} = [\r\n        -3   -3    1    0\r\n        -1   -3   -3   -1\r\n        ];\r\n    F{4} = [\r\n        5    9    9    5\r\n        -3   -3   -9   -9\r\n        ];\r\n    F{5} = [\r\n        -9  -10  -10   -9\r\n        9    9   10   10\r\n        ];\r\n    f = WayfindingPassed(AB,F);\r\n    f_correct = [ 2 1 2 4 ];\r\n    assert(isequal(f,f_correct));\r\n    \r\n    AB = [ 0 0 ; -8 8 ];\r\n    F{1} = [\r\n        -4   -2   -2   -4\r\n        8    8    4    4\r\n        ];\r\n    F{2} = [\r\n        2    4    4    2\r\n        -0   -0   -6   -6\r\n        ];\r\n    F{3} = [\r\n        -4   -2   -2   -6   -6\r\n        -4   -4   -6   -6   -4\r\n        ];\r\n    f = WayfindingPassed(AB,F);\r\n    assert(isempty(f));\r\n    \r\n    %%\r\n\r\n    AB = [ 7 -8 ; 0 0 ];\r\n    F{1} = [\r\n        8    9    9    8\r\n        3    3   -2   -2\r\n        ];\r\n    F{2} = [\r\n        -9   -7   -7   -4   -4   -3   -3    0    0    1    1    4    4    5    5   -2   -8   -9\r\n        -2   -2    2    2   -2   -2    2    2   -2   -2    2    2   -2   -2    3    4    3    2\r\n        ];\r\n    F{3} = [\r\n        -2   -1   -1   -2\r\n        1    1   -4   -4\r\n        ];\r\n    F{4} = [\r\n        -6   -5   -5   -3    1    2    2    3    3    1   -4   -6\r\n        1    1   -3   -5   -5   -4    1    1   -5   -8   -7   -4\r\n        ];\r\n    f = WayfindingPassed(AB,F);\r\n    f_correct = [ 2 4 2 3 2 4 2 ];\r\n    assert(isequal(f,f_correct));\r\n    \r\n    %%\r\n\r\n    AB = [ 0 -2 ; 0 -4 ];\r\n    F{1} = [\r\n        -3    3    3    2    2   -2   -2    2    2   -3\r\n        -5   -5    3    3   -3   -3    2    2    3    3\r\n        ];\r\n    F{2} = [\r\n        -1    1    1   -1\r\n        1    1   -1   -1\r\n        ];\r\n    F{3} = [\r\n        -4    4    4    5    5   -5   -5   -4\r\n        4    4   -7   -7    5    5   -1   -1\r\n        ];\r\n    F{4} = [\r\n        -5   -4   -4    4    4   -5\r\n        -1   -1   -6   -6   -7   -7\r\n        ];\r\n    f = WayfindingPassed(AB,F);\r\n    f_correct = [ 2 1 ];\r\n    assert(isequal(f,f_correct));\r\n    \r\n    %%\r\n\r\n    AB = [ -2 0 ; 6 -6 ];\r\n    F{1} = [\r\n        2   -4   -4    2    2   -2    0   -2    2\r\n        -4   -4    4    4    2    2   -0   -2   -2\r\n        ];\r\n    f = WayfindingPassed(AB,F);\r\n    f_correct = [ 1 1 1 ];\r\n    assert(isequal(f,f_correct));","published":true,"deleted":false,"likes_count":1,"comments_count":5,"created_by":6556,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":16,"test_suite_updated_at":"2014-03-03T12:10:50.000Z","rescore_all_solutions":false,"group_id":26,"created_at":"2014-02-25T23:45:22.000Z","updated_at":"2026-02-19T10:36:52.000Z","published_at":"2014-03-03T09:46:27.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.JPEG\"}],\"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\u003eThis is the third part of a series of assignments about wayfinding. The final goal of this series is to be able to calculate the fastest route through a terrain of areas with different properties. The assignments will build on top of each other, gradually increasing the complexity, but guiding you stepwise towards the final goal. You can re-use code from preceding assignments to save some work. See\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=\\\"http://www.mathworks.com/matlabcentral/cody/problems/2218-wayfinding-1-crossing\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e[1]\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:hyperlink w:docLocation=\\\"http://www.mathworks.nl/matlabcentral/cody/problems/2219-wayfinding-2-traversing\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e[2]\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\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\u003eWhich areas are traversed?\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\u003eFor this third assignment in this series you have to calculate which areas are traversed and in which order, while going from A to B. Our path from A to B is a straight line. And the area boundaries are closed polygons consisting of a finite number of straight segments.\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\u003eIn this assignments, the areas do not overlap. If an area is crossed twice, it is listed twice in the returned vector. And if\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\u003eAB\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e crosses first for example area\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\u003eF2\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, then\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\u003eF3\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, and then\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\u003eF2\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e again, the output vector should contain\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\u003e[ ... 2 3 2 ... ]\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. Simple.\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\u003eThe inputs of the function\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\u003eWayfindingPassed(AB,F)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e are a matrix\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\u003eAB\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e of two columns, each with x-y coordinates, of our straight path from A (1st column) to B (2nd column), and a cell array\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\u003eF\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e of 2-D matrices with columns with x- and y-coordinates, each column a subsequent node of the polygon boundary of the area. The last node is implicitly connected to the first. The index of each area, to be referred to in the output vector, is equal to its position in the cell array F.\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[ AB = [\\n   xA xB\\n   yA yB\\n ]\\n\\n F = {\\n  [ x11 x12 ... x1n ;\\n    y11 y12 ... y1n ]\\n  [ x21 x22 ... x2n ;\\n    y21 y22 ... y2n ]\\n }]]\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\u003eYour output\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\u003ev\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e will contain the indices in\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\u003eF\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e of the crossed areas, in the correct order. In the example above, the correct answer is\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\u003e[ 3 4 4 1 1]\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. Crossing means 'being present in that area', so if A, the start, is in area 3, it is considered as 'crossed'. If you pass the same area multiple times, and leave it in between, each event is listed.\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.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\"}]}"},{"id":58852,"title":"Intersection(s) of Circles","description":"Do two given circles intersect in Zero, One, or Two points and provide the intersection(s). The Stafford method may provide some guidance and alternate solution method. I will elaborate a more geometric solution utilizing Matlab specific functions, rotation matrix, and translation matrix. Assumption is that Matlab function circcirc is not available.\r\nGiven circles [x1,y1,R] and [x2,y2,P] return the intersections [], [x y], or [x y;x y].\r\nThe below figure is created based upon d=distance([x1,y1],[x2,y2]), translating (x1,y1) to (0,0), and rotating (x2,y2) to be on the Y-axis. From this manipulation two right triangles are apparent: [X,Y,R] and [X,d-Y,P]. Subtracting and simplifying these triangles leads to Y and two X values after substituting back into R^2=X^+Y^2 equation.\r\nP^2=X^2+(d-Y)^2  and R^2=X^2+Y^2  after subtraction gives R^2-P^2=Y^2-(d-Y)^2 = Y^2-d^2+2dY-Y^2=2dY-d^2 thus\r\nY=(R^2-P^2+d^2)/(2d)  and X=+/- (R^2-Y^2)^.5\r\nThe trick is to now un-rotate and translate this solution matrix using t=atan2(dx,dy), [cos(t) -sin(t);sin(t) cos(t)] and [x1 y1]\r\n\r\n \r\nDiagram showing a normalization of posed problem where (x1,y1) is placed at origin and (x2,y2) is placed on Y-axis at distance d. Final (x,y) values will require rotation and shifting.","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.4333px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 1000.5px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 500.25px; transform-origin: 407px 500.25px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 63px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 31.5px; text-align: left; transform-origin: 384px 31.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 296px 8px; transform-origin: 296px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eDo two given circles intersect in Zero, One, or Two points and provide the intersection(s). The \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/answers/196755-fsolve-to-find-circle-intersections\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eStafford\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 42.5px 8px; transform-origin: 42.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e method may provide some guidance and alternate solution method. I will elaborate a more geometric solution utilizing Matlab specific functions, rotation matrix, and translation matrix. Assumption is that Matlab function circcirc is not available.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 248px 8px; transform-origin: 248px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eGiven circles [x1,y1,R] and [x2,y2,P] return the intersections [], [x y], or [x y;x y].\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 63px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 31.5px; text-align: left; transform-origin: 384px 31.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 380.5px 8px; transform-origin: 380.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe below figure is created based upon d=distance([x1,y1],[x2,y2]), translating (x1,y1) to (0,0), and rotating (x2,y2) to be on the Y-axis. From this manipulation two right triangles are apparent: [X,Y,R] and [X,d-Y,P]. Subtracting and simplifying these triangles leads to Y and two X values after substituting back into R^2=X^+Y^2 equation.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 358px 8px; transform-origin: 358px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eP^2=X^2+(d-Y)^2  and R^2=X^2+Y^2  after subtraction gives R^2-P^2=Y^2-(d-Y)^2 = Y^2-d^2+2dY-Y^2=2dY-d^2 thus\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 143px 8px; transform-origin: 143px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eY=(R^2-P^2+d^2)/(2d)  and X=+/- (R^2-Y^2)^.5\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 379px 8px; transform-origin: 379px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe trick is to now un-rotate and translate this solution matrix using t=atan2(dx,dy), [cos(t) -sin(t);sin(t) cos(t)] and [x1 y1]\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 8px; transform-origin: 0px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 655.5px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 327.75px; text-align: left; transform-origin: 384px 327.75px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: baseline;width: 482px;height: 650px\" src=\"data:image/png;base64,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I3hL9+7dhRArVqxIasDGZme8GXJjUp8DUNGLl5whEn6l6Mg9N6n91NKdFHaT9xuAZPr+6hRqwoQJQojgr89xPPjgg0KIRx555N577xVCzJgxI86D77zzTiHEunXrjHdPnDjRsmXL//zP/wx9TGNjoxBiyJAhqY08ZCrs3o3QamJqyH+wXBI/mlh7buL7qQ07qV70PaS79wio788s1JAhQ4QQJ06cCN7S2Nh4/GTB27t06ZKZmSmEuPrqq+N/2o8//lgIMWHCBOPdsrIyIcQf//jHsIe1bNmyTZs2KQw7tMGpHMOQGDJsryROr0TuuYbE91Ord1Lt6HtIZ1Fabz6fTwiRkZERvOXVV19tfjLjdq/XO3fuXOPxTz/9dPxP26VLl86dOy9ZssTv9wshFi1a1KJFi5EjR4Y9LDMz88iRI8mO+eTLsiz5W8WIJPtQ4zRfnjE49L/g75QJbsWRe64h8f3U0p0UdiLDTvPjH/94yMmCd82cOdN4Y8qUKU1+np///Od1dXUrVqyoqal55513Ro0aZfyGHsbrTX0TMhIcoMTQisfjOZj3/TN92xxY3ubAchOvb0h8P7VhJ4UNwn8Xg15OPfVUIUR9fX3wIo5evXoFn64QauHChcuWLZs4ceKJEyf+8Ic/vPLKK2PGjInzmceMGXPvvfcuWbLkwIEDfr//5z//eeRjjh49muwLAEV9lnAgEAgG2HgjwFVbUJLH4/nyjMHBd9scWB58OxD4bvP2eJq+6jByzzUktZ9atJPCZvyWpDdjB1u/fn38h+3bt++OO+5o167d9OnTf//737dt2/b222/ft29fnA/JyckpKCh46623Vq5cedZZZ0Wmvba21ufznX/++YmPNs5c11joC3lkKn8kEbDUwbyCWA02BDfhJjfeqHtusvupFTsp7EeG9WbseNu3b4//sKKiovr6+gULFmRlZWVlZS1YsKC+vr64uNi4969//avH47n22mvDPurWW289evToihUrov6WvXbtWiFE3759Uxh2rLlC2CTYzSVes2ZNeXl5eXl5dXV1/EdWV1cbj/zggw/sGZsLRV2ITucTRt1zU9hPrdtJYRsyrLd+/fq1bt161apVcR7z6KOPbty4ccKECZdffrlxy4ABA26++eaKiopp06bF+cArr7yydevWQoibbrop8t533nnH6/WGnnuOL8EXrWRabPji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bNy48YMPPrjzzjtlD+R7Z5xxxk9/+lPj7b17965evXrAgAESx6POhh1Kte9SkGpblJr7nWrHqMhDupqbfZNclGGvN8o/trGxMfSMS7NmzQLy/uTUpk2bfvCDH5x++unZ2dn/93//d/ToUVkjCdq1a9eqVas6depUWVlZVlb24osvrlu3Tu6Q/vGPf5SUlMycOVPuMGKprq6++eabJ06c2LFjR4nDUGrDjqTId8mg4Bal4H5nUOoYFXlIV3yzj8XJGX7ssce6du3atWvX3r17x3pMZmam3+8PvtvY2NisWTNbRifEySN89913P/roo7KyslGjRs2bN08IMX/+fNtGEmtU7dq1O/PMM4uKioQQ+fn5AwYMWLlypdwhPfnkk+eff/7nn3++du3aQ4cObdu2TdYvvJEbWGVl5ZAhQ0aPHj1x4kQpQwqSu2HHp853yaDOFhWkyH4XRp1jVCwqb/ZxqHKNohVGjhzZv39/IUScn8SPfvSjrVu3Bt+tq6uz8xxM6Ai/+OKL/Pz84FDbtWu3f/9+20YSa1R1dXWhd8napkOH9Le//e3rr78uLS0VQhw4cGDt2rWnnnpqfn6+3FEJId5///277rpr2rRpV111lf2DCSN3w45Dqe+SITc3V5EtKujf//3fQ99VpCV1dXWKHKNiUXazb4LkS8Rst2bNmtArpRsbG3v16rVmzZpAILBz584LL7zw66+/ljKwTz/99MILL/zss88CgcDf//73a665ZtmyZVJGEsrn83Xv3n316tWBQOCbb77p3bt3RUWF7EF975ZbblHhutZAIPD5559ffPHFq1ev9v1LQ0ODxPGos2GHUu27FEmRLUrN/U7NY1ToIV3Nzb5JTp4NJ8Lr9T711FP33HNP+/btt27dOn36dFnPSe/YseNDDz00fPjwTp06bd26ddiwYUOHDpUyklD/9m//9txzz913330vvvjirl27xo0bp8fz8GxXWlr67bffTpgwIXjLqFGjHn74YVnjUWfDDqXad0lZau53ah6jQqm52TfJE9DhDLYNjh492qJFi6iXcdnJ7/cfO3asefPmiixDBf3zn//MzMxUbVRokiIbNlKj4H6n7DEqlF6bPRkGAEAaPX5ZAADAkcgwAADSkGEAAKQhwwAASEOGAQCQhgwDACANGQYAQBoyDACANGQYAABpyDAAANKQYQAApCHDAABIQ4YBAJCGDAMAIA0ZBgBAGjIMAIA0ZBgAAGnIMAAA0pBhAACkIcMAAEhDhgEAkIYMAwAgDRkGAEAaMgwAgDRkGAAAacgwAADSkGEAAKQhwwAASEOGAQCQhgwDACANGQYAQBoyDACANGQYAABpyDAAANKQYQAApCHDAABIQ4YBAJCGDAMAIA0ZBgBAGjIMAIA0ZBgAAGnIMAAA0pBhAACkIcMAAEhDhgEAkIYMAwAgDRkGAEAaMgwAgDRkGAAAacgwAADSkGEAAKQhwwAASEOGAQCQhgwDACANGQYAQBoyDACANGQYAABpyDAAANKQYQAApCHDAABIQ4YBAJCGDAMAIA0ZBgBAGjIMAIA0ZBgAAGnIMAAA0pBhAACkIcMAAEhDhgEAkIYMAwAgDRkGAEAaMgwAgDRkGAAAacgwAADSkGEAAKQhwwAASEOGAQCQhgwDACANGQYAQBoyDACANGQYAABpyDAAANKQYQAApCHDAABIQ4YBAJCGDAMAIA0ZBgBAGjIMAIA0ZBgAAGnIMAAA0pBhAACkIcMAAEhDhgEAkIYMAwAgDRkGAEAaMgwAgDRkGAAAacgwAADSkGEAAKQhwwAASEOGAQCQhgwDACANGQYAQJr/B75uYHjxSKAyAAAAAElFTkSuQmCC\" data-image-state=\"image-loaded\" width=\"482\" height=\"650\"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 2px 8px; transform-origin: 2px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 21px; text-align: left; transform-origin: 384px 21px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 370.5px 8px; transform-origin: 370.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eDiagram showing a normalization of posed problem where (x1,y1) is placed at origin and (x2,y2) is placed on Y-axis at distance d. Final (x,y) values will require rotation and shifting.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function xy = circle_intersections(x1,y1,R,x2,y2,P)\r\n  d2=(x1-x2)^2+(y1-y2)^2;\r\n  d=d2^0.5;\r\n  xy=[];\r\n  if d\u003eP+R,return;end % No intersection due to C-C separation\r\n  % Two other No intersection Cases can be determined using d,P,R\r\n  %if ,return;end % No intersection, smaller R is inside larger P\r\n  %if ,return;end % No intersection, smaller P is inside larger R\r\n  \r\n %Single point intersections\r\n if d==P+R\r\n  xy=[0 R];\r\n elseif d-P==-R\r\n  %xy=[];\r\n elseif d+P==R\r\n  %xy=\r\n end\r\n \r\n if isempty(xy) % Dual Solutions\r\n  %y=\r\n  %x=\r\n  %xy=[ ; ];\r\n end\r\n \r\n %Rotation Angle: atan2\r\n theta=atan2(x2-x1,y2-y1); % (X,Y) output radians Neg Left of vert, Pos Right of Vert\r\n \r\n %Rotation Matrix: [cos(t) -sin(t);sin(t) cos(t)]\r\n %Translation matrix: [x1 y1]\r\n %Check of (x2,y2) being regenerated from d, theta, and translation\r\n [xy2c]=[0 d]*[cos(theta) -sin(theta);sin(theta) cos(theta)]+[x1 y1]\r\n [x2 y2]\r\n \r\n %xy=\r\n \r\n \r\n \r\nend % circle_intersections","test_suite":"%%\r\nvalid=1;\r\nx1=0;y1=0;R=6;\r\nx2=0;y2=10;P=8;\r\nxy = circle_intersections(x1,y1,R,x2,y2,P)\r\nif size(xy,1)~=2\r\n valid=0;\r\nend\r\nif sum(sum((xy-[x1 y1]).^2,2)-R^2)\u003e1e-6 % Test points\r\n valid=0;\r\nend\r\nif sum(sum((xy-[x2 y2]).^2,2)-P^2)\u003e1e-6 % Test points\r\n valid=0;\r\nend\r\nassert(valid)\r\n%%\r\nvalid=1;\r\nx1=0;y1=0;R=6;\r\nx2=10;y2=0;P=8;\r\nxy = circle_intersections(x1,y1,R,x2,y2,P)\r\nif size(xy,1)~=2\r\n valid=0;\r\nend\r\nif sum(sum((xy-[x1 y1]).^2,2)-R^2)\u003e1e-6 % Test points\r\n valid=0;\r\nend\r\nif sum(sum((xy-[x2 y2]).^2,2)-P^2)\u003e1e-6 % Test points\r\n valid=0;\r\nend\r\nassert(valid)\r\n%%\r\nvalid=1;\r\nx1=0;y1=0;R=6;\r\nx2=-10;y2=0;P=8;\r\nxy = circle_intersections(x1,y1,R,x2,y2,P)\r\nif size(xy,1)~=2\r\n valid=0;\r\nend\r\nif sum(sum((xy-[x1 y1]).^2,2)-R^2)\u003e1e-6 % Test points\r\n valid=0;\r\nend\r\nif sum(sum((xy-[x2 y2]).^2,2)-P^2)\u003e1e-6 % Test points\r\n valid=0;\r\nend\r\nassert(valid)\r\n%%\r\nvalid=1;\r\nx1=0;y1=0;R=6;\r\nx2=0;y2=-10;P=8;\r\nxy = circle_intersections(x1,y1,R,x2,y2,P)\r\nif size(xy,1)~=2\r\n valid=0;\r\nend\r\nif sum(sum((xy-[x1 y1]).^2,2)-R^2)\u003e1e-6 % Test points\r\n valid=0;\r\nend\r\nif sum(sum((xy-[x2 y2]).^2,2)-P^2)\u003e1e-6 % Test points\r\n valid=0;\r\nend\r\nassert(valid)\r\n%%\r\nvalid=1;\r\nx1=4;y1=4;R=6;\r\nx2=6;y2=-2;P=8;\r\nxy = circle_intersections(x1,y1,R,x2,y2,P)\r\nif size(xy,1)~=2\r\n valid=0;\r\nend\r\nif sum(sum((xy-[x1 y1]).^2,2)-R^2)\u003e1e-6 % Test points\r\n valid=0;\r\nend\r\nif sum(sum((xy-[x2 y2]).^2,2)-P^2)\u003e1e-6 % Test points\r\n valid=0;\r\nend\r\nassert(valid)\r\n%%\r\nvalid=1;\r\nx1=-4;y1=-4;R=4;\r\nx2=-4;y2=8;P=8;\r\nxy = circle_intersections(x1,y1,R,x2,y2,P)\r\nif size(xy,1)~=1\r\n valid=0;\r\nend\r\nif sum(sum((xy-[x1 y1]).^2,2)-R^2)\u003e1e-6 % Test points\r\n valid=0;\r\nend\r\nif sum(sum((xy-[x2 y2]).^2,2)-P^2)\u003e1e-6 % Test points\r\n valid=0;\r\nend\r\nassert(valid)\r\n%%\r\nvalid=1;\r\nx1=3;y1=1;R=4;\r\nx2=3;y2=5;P=8;\r\nxy = circle_intersections(x1,y1,R,x2,y2,P)\r\nif size(xy,1)~=1\r\n valid=0;\r\nend\r\nif sum(sum((xy-[x1 y1]).^2,2)-R^2)\u003e1e-6 % Test points\r\n valid=0;\r\nend\r\nif sum(sum((xy-[x2 y2]).^2,2)-P^2)\u003e1e-6 % Test points\r\n valid=0;\r\nend\r\nassert(valid)\r\n%%\r\nvalid=1;\r\nx1=-2;y1=1;R=10;\r\nx2=0;y2=1;P=8;\r\nxy = circle_intersections(x1,y1,R,x2,y2,P)\r\nif size(xy,1)~=1\r\n valid=0;\r\nend\r\nif sum(sum((xy-[x1 y1]).^2,2)-R^2)\u003e1e-6 % Test points\r\n valid=0;\r\nend\r\nif sum(sum((xy-[x2 y2]).^2,2)-P^2)\u003e1e-6 % Test points\r\n valid=0;\r\nend\r\nassert(valid)\r\n%%\r\nvalid=1;\r\nx1=2;y1=1;R=1;\r\nx2=8;y2=8;P=2;\r\nxy = circle_intersections(x1,y1,R,x2,y2,P)\r\nif ~isempty(xy)\r\n valid=0;\r\nend\r\nassert(valid)\r\n%%\r\nvalid=1;\r\nx1=2;y1=1;R=1;\r\nx2=2;y2=1;P=2;\r\nxy = circle_intersections(x1,y1,R,x2,y2,P)\r\nif ~isempty(xy)\r\n valid=0;\r\nend\r\nassert(valid)\r\n%%\r\nvalid=1;\r\nx1=2;y1=2;R=1;\r\nx2=3;y2=3;P=3;\r\nxy = circle_intersections(x1,y1,R,x2,y2,P)\r\nif ~isempty(xy)\r\n valid=0;\r\nend\r\nassert(valid)\r\n%%\r\nvalid=1;\r\nx1=2;y1=2;R=5;\r\nx2=3;y2=3;P=1;\r\nxy = circle_intersections(x1,y1,R,x2,y2,P)\r\nif ~isempty(xy)\r\n valid=0;\r\nend\r\nassert(valid)\r\n%%\r\nvalid=1;\r\nx1=rand;y1=4+rand;R=6+rand;\r\n[x1 y1 R]\r\nx2=-1+rand;y2=-3+rand;P=8+rand;\r\n[x2 y2 P]\r\nxy = circle_intersections(x1,y1,R,x2,y2,P)\r\nif size(xy,1)~=2\r\n valid=0;\r\nend\r\nif sum(sum((xy-[x1 y1]).^2,2)-R^2)\u003e1e-6 % Test points\r\n valid=0;\r\nend\r\nif sum(sum((xy-[x2 y2]).^2,2)-P^2)\u003e1e-6 % Test points\r\n valid=0;\r\nend\r\nassert(valid)\r\n%%\r\nvalid=1;\r\nx1=-1+rand;y1=-3+rand;R=8+rand;\r\n[x1 y1 R]\r\nx2=rand;y2=4+rand;P=6+rand;\r\n[x2 y2 P]\r\nxy = circle_intersections(x1,y1,R,x2,y2,P)\r\nif size(xy,1)~=2\r\n valid=0;\r\nend\r\nif sum(sum((xy-[x1 y1]).^2,2)-R^2)\u003e1e-6 % Test points\r\n valid=0;\r\nend\r\nif sum(sum((xy-[x2 y2]).^2,2)-P^2)\u003e1e-6 % Test points\r\n valid=0;\r\nend\r\nassert(valid)\r\n\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":1,"created_by":3097,"edited_by":3097,"edited_at":"2023-08-11T15:10:45.000Z","deleted_by":null,"deleted_at":null,"solvers_count":6,"test_suite_updated_at":"2023-08-11T15:10:45.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2023-08-10T16:45:31.000Z","updated_at":"2023-08-11T15:10:45.000Z","published_at":"2023-08-10T19:02:14.000Z","restored_at":null,"restored_by":null,"spam":null,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eDo two given circles intersect in Zero, One, or Two points and provide the intersection(s). The \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/answers/196755-fsolve-to-find-circle-intersections\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eStafford\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e method may provide some guidance and alternate solution method. I will elaborate a more geometric solution utilizing Matlab specific functions, rotation matrix, and translation matrix. Assumption is that Matlab function circcirc is not available.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGiven circles [x1,y1,R] and [x2,y2,P] return the intersections [], [x y], or [x y;x y].\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe below figure is created based upon d=distance([x1,y1],[x2,y2]), translating (x1,y1) to (0,0), and rotating (x2,y2) to be on the Y-axis. From this manipulation two right triangles are apparent: [X,Y,R] and [X,d-Y,P]. Subtracting and simplifying these triangles leads to Y and two X values after substituting back into R^2=X^+Y^2 equation.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eP^2=X^2+(d-Y)^2  and R^2=X^2+Y^2  after subtraction gives R^2-P^2=Y^2-(d-Y)^2 = Y^2-d^2+2dY-Y^2=2dY-d^2 thus\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eY=(R^2-P^2+d^2)/(2d)  and X=+/- (R^2-Y^2)^.5\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe trick is to now un-rotate and translate this solution matrix using t=atan2(dx,dy), [cos(t) -sin(t);sin(t) cos(t)] and [x1 y1]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"650\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"482\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"baseline\\\"/\u003e\u003cw:attr w:name=\\\"altText\\\" w:val=\\\"\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eDiagram showing a normalization of posed problem where (x1,y1) is placed at origin and (x2,y2) is placed on Y-axis at distance d. Final (x,y) values will require rotation and shifting.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image1.png\",\"relationshipId\":\"rId1\"}]},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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I3hL9+7dhRArVqxIasDGZme8GXJjUp8DUNGLl5whEn6l6Mg9N6n91NKdFHaT9xuAZPr+6hRqwoQJQojgr89xPPjgg0KIRx555N577xVCzJgxI86D77zzTiHEunXrjHdPnDjRsmXL//zP/wx9TGNjoxBiyJAhqY08ZCrs3o3QamJqyH+wXBI/mlh7buL7qQ07qV70PaS79wio788s1JAhQ4QQJ06cCN7S2Nh4/GTB27t06ZKZmSmEuPrqq+N/2o8//lgIMWHCBOPdsrIyIcQf//jHsIe1bNmyTZs2KQw7tMGpHMOQGDJsryROr0TuuYbE91Ord1Lt6HtIZ1Fabz6fTwiRkZERvOXVV19tfjLjdq/XO3fuXOPxTz/9dPxP26VLl86dOy9ZssTv9wshFi1a1KJFi5EjR4Y9LDMz88iRI8mO+eTLsiz5W8WIJPtQ4zRfnjE49L/g75QJbsWRe64h8f3U0p0UdiLDTvPjH/94yMmCd82cOdN4Y8qUKU1+np///Od1dXUrVqyoqal55513Ro0aZfyGHsbrTX0TMhIcoMTQisfjOZj3/TN92xxY3ubAchOvb0h8P7VhJ4UNwn8Xg15OPfVUIUR9fX3wIo5evXoFn64QauHChcuWLZs4ceKJEyf+8Ic/vPLKK2PGjInzmceMGXPvvfcuWbLkwIEDfr//5z//eeRjjh49muwLAEV9lnAgEAgG2HgjwFVbUJLH4/nyjMHBd9scWB58OxD4bvP2eJq+6jByzzUktZ9atJPCZvyWpDdjB1u/fn38h+3bt++OO+5o167d9OnTf//737dt2/b222/ft29fnA/JyckpKCh46623Vq5cedZZZ0Wmvba21ufznX/++YmPNs5c11joC3lkKn8kEbDUwbyCWA02BDfhJjfeqHtusvupFTsp7EeG9WbseNu3b4//sKKiovr6+gULFmRlZWVlZS1YsKC+vr64uNi4969//avH47n22mvDPurWW289evToihUrov6WvXbtWiFE3759Uxh2rLlC2CTYzSVes2ZNeXl5eXl5dXV1/EdWV1cbj/zggw/sGZsLRV2ITucTRt1zU9hPrdtJYRsyrLd+/fq1bt161apVcR7z6KOPbty4ccKECZdffrlxy4ABA26++eaKiopp06bF+cArr7yydevWQoibbrop8t533nnH6/WGnnuOL8EXrWRabPji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bNy48YMPPrjzzjtlD+R7Z5xxxk9/+lPj7b17965evXrAgAESx6POhh1Kte9SkGpblJr7nWrHqMhDupqbfZNclGGvN8o/trGxMfSMS7NmzQLy/uTUpk2bfvCDH5x++unZ2dn/93//d/ToUVkjCdq1a9eqVas6depUWVlZVlb24osvrlu3Tu6Q/vGPf5SUlMycOVPuMGKprq6++eabJ06c2LFjR4nDUGrDjqTId8mg4Bal4H5nUOoYFXlIV3yzj8XJGX7ssce6du3atWvX3r17x3pMZmam3+8PvtvY2NisWTNbRifEySN89913P/roo7KyslGjRs2bN08IMX/+fNtGEmtU7dq1O/PMM4uKioQQ+fn5AwYMWLlypdwhPfnkk+eff/7nn3++du3aQ4cObdu2TdYvvJEbWGVl5ZAhQ0aPHj1x4kQpQwqSu2HHp853yaDOFhWkyH4XRp1jVCwqb/ZxqHKNohVGjhzZv39/IUScn8SPfvSjrVu3Bt+tq6uz8xxM6Ai/+OKL/Pz84FDbtWu3f/9+20YSa1R1dXWhd8napkOH9Le//e3rr78uLS0VQhw4cGDt2rWnnnpqfn6+3FEJId5///277rpr2rRpV111lf2DCSN3w45Dqe+SITc3V5EtKujf//3fQ99VpCV1dXWKHKNiUXazb4LkS8Rst2bNmtArpRsbG3v16rVmzZpAILBz584LL7zw66+/ljKwTz/99MILL/zss88CgcDf//73a665ZtmyZVJGEsrn83Xv3n316tWBQOCbb77p3bt3RUWF7EF975ZbblHhutZAIPD5559ffPHFq1ev9v1LQ0ODxPGos2GHUu27FEmRLUrN/U7NY1ToIV3Nzb5JTp4NJ8Lr9T711FP33HNP+/btt27dOn36dFnPSe/YseNDDz00fPjwTp06bd26ddiwYUOHDpUyklD/9m//9txzz913330vvvjirl27xo0bp8fz8GxXWlr67bffTpgwIXjLqFGjHn74YVnjUWfDDqXad0lZau53ah6jQqm52TfJE9DhDLYNjh492qJFi6iXcdnJ7/cfO3asefPmiixDBf3zn//MzMxUbVRokiIbNlKj4H6n7DEqlF6bPRkGAEAaPX5ZAADAkcgwAADSkGEAAKQhwwAASEOGAQCQhgwDACANGQYAQBoyDACANGQYAABpyDAAANKQYQAApCHDAABIQ4YBAJCGDAMAIA0ZBgBAGjIMAIA0ZBgAAGnIMAAA0pBhAACkIcMAAEhDhgEAkIYMAwAgDRkGAEAaMgwAgDRkGAAAacgwAADSkGEAAKQhwwAASEOGAQCQhgwDACANGQYAQBoyDACANGQYAABpyDAAANKQYQAApCHDAABIQ4YBAJCGDAMAIA0ZBgBAGjIMAIA0ZBgAAGnIMAAA0pBhAACkIcMAAEhDhgEAkIYMAwAgDRkGAEAaMgwAgDRkGAAAacgwAADSkGEAAKQhwwAASEOGAQCQhgwDACANGQYAQBoyDACANGQYAABpyDAAANKQYQAApCHDAABIQ4YBAJCGDAMAIA0ZBgBAGjIMAIA0ZBgAAGnIMAAA0pBhAACkIcMAAEhDhgEAkIYMAwAgDRkGAEAaMgwAgDRkGAAAacgwAADSkGEAAKQhwwAASEOGAQCQhgwDACANGQYAQBoyDACANGQYAABpyDAAANKQYQAApCHDAABIQ4YBAJCGDAMAIA0ZBgBAGjIMAIA0ZBgAAGnIMAAA0pBhAACkIcMAAEhDhgEAkIYMAwAgDRkGAEAaMgwAgDRkGAAAacgwAADSkGEAAKQhwwAASEOGAQCQhgwDACANGQYAQJr/B75uYHjxSKAyAAAAAElFTkSuQmCC\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":60925,"title":"Intersect three sequences","description":"Most numbers have interesting properties, if you look hard enough and interpret “interesting” liberally. Let’s choose a number at random—300, say—and list some of its properties:\r\nIt is divisible by the square of its largest prime factor. \r\nIt is the area of a triangle with integer sides and integer area\r\nIt is a folding point of the non-negative integers written in a hexagonal spiral (see below), as are 1, 2, 3, 4, 5, 7, 8, 10, 12, 14, 16, 19, 21, 24, etc. \r\nA number that shares these properties is 108: (a) It is divisible by 9, or the square of its largest prime factor (3), (b) it is the area of a triangle with sides 15, 15, and 18, and (c) it is a folding point of the hexagon (it would be to the right of 75 in the hexagon below). \r\nWrite a function to determine whether a number has the three properties listed above. \r\n","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.4333px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 677.233px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 408px 338.617px; transform-origin: 408px 338.617px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 385px 21px; text-align: left; transform-origin: 385px 21px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 361.508px 8px; transform-origin: 361.508px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eMost numbers have interesting properties, if you look hard enough and interpret “interesting” liberally. Let’s choose a number at random—300, say—and list some of its properties:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003col style=\"block-size: 81.7333px; counter-reset: list-item 0; font-family: Helvetica, Arial, sans-serif; list-style-type: decimal; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; perspective-origin: 392px 40.8667px; transform-origin: 392px 40.8667px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"block-size: 20.4333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 364px 10.2167px; text-align: left; transform-origin: 364px 10.2167px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 164.125px 8px; transform-origin: 164.125px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eIt is divisible by the square of its largest prime factor. \u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.4333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 364px 10.2167px; text-align: left; transform-origin: 364px 10.2167px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 185.933px 8px; transform-origin: 185.933px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eIt is the area of a triangle with integer sides and integer area\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 40.8667px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 364px 20.4333px; text-align: left; transform-origin: 364px 20.4333px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 363.283px 8px; transform-origin: 363.283px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eIt is a folding point of the non-negative integers written in a hexagonal spiral (see below), as are 1, 2, 3, 4, 5, 7, 8, 10, 12, 14, 16, 19, 21, 24, etc. \u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ol\u003e\u003cdiv style=\"block-size: 63px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 385px 31.5px; text-align: left; transform-origin: 385px 31.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 379.592px 8px; transform-origin: 379.592px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eA number that shares these properties is 108: (a) It is divisible by 9, or the square of its largest prime factor (3), (b) it is the area of a triangle with sides 15, 15, and 18, and (c) it is a folding point of the hexagon (it would be to the right of 75 in the hexagon below). \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 385px 10.5px; text-align: left; transform-origin: 385px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 266.708px 8px; transform-origin: 266.708px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWrite a function to determine whether a number has the three properties listed above. \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 421.5px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 385px 210.75px; text-align: left; transform-origin: 385px 210.75px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" width=\"487\" height=\"416\" style=\"vertical-align: baseline;width: 487px;height: 416px\" src=\"data:image/png;base64,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\" data-image-state=\"image-loaded\"\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function tf = isX3Seq(x)\r\n  tf = false;\r\nend","test_suite":"%%\r\nassert(isX3Seq(108))\r\n\r\n%%\r\nassert(~isX3Seq(144))\r\n\r\n%%\r\nassert(~isX3Seq(200))\r\n\r\n%%\r\nassert(~isX3Seq(256))\r\n\r\n%%\r\nassert(isX3Seq(300))\r\n\r\n%%\r\nassert(isX3Seq(432))\r\n\r\n%%\r\nassert(~isX3Seq(500))\r\n\r\n%%\r\nassert(~isX3Seq(648))\r\n\r\n%%\r\nassert(~isX3Seq(660))\r\n\r\n%%\r\nassert(~isX3Seq(768))\r\n\r\n%%\r\nassert(isX3Seq(1200))\r\n\r\n%%\r\nassert(~isX3Seq(1553))\r\n\r\n%%\r\nassert(isX3Seq(1728))\r\n\r\n%%\r\nassert(~isX3Seq(1875))\r\n\r\n%%\r\nassert(~isX3Seq(3072))\r\n\r\n%%\r\nassert(~isX3Seq(3924))\r\n\r\n%%\r\nassert(isX3Seq(4332))\r\n\r\n%%\r\nassert(~isX3Seq(6084))\r\n\r\n%%\r\nassert(~isX3Seq(8118))\r\n\r\n%%\r\nassert(~isX3Seq(10806))\r\n\r\n%%\r\nassert(~isX3Seq(14283))\r\n\r\n%%\r\nassert(isX3Seq(18252))\r\n\r\n%%\r\nassert(~isX3Seq(26010))\r\n\r\n%%\r\nassert(~isX3Seq(31236))\r\n\r\n%%\r\nassert(~isX3Seq(42336))\r\n\r\n%%\r\nassert(~isX3Seq(49152))\r\n\r\n%%\r\nassert(isX3Seq(65712))\r\n\r\n%%\r\nassert(isX3Seq(99372))\r\n\r\n%%\r\nassert(~isX3Seq(116592))\r\n\r\n%%\r\nassert(~isX3Seq(140000))\r\n\r\n%%\r\nassert(~isX3Seq(152172))\r\n\r\n%%\r\nassert(~isX3Seq(160314))\r\n\r\n%%\r\nassert(~isX3Seq(170008))\r\n\r\n%%\r\nassert(isX3Seq(212268))\r\n\r\n%%\r\nassert(isX3Seq(248832))\r\n\r\n%%\r\nassert(isX3Seq(280908))\r\n\r\n%%\r\nassert(~isX3Seq(296274))\r\n\r\n%%\r\nassert(isX3Seq(303372))\r\n\r\n%%\r\nassert(isX3Seq(314928))\r\n\r\n%%\r\nassert(~isX3Seq(340707))\r\n\r\n%%\r\nassert(isX3Seq(489648))\r\n\r\n%%\r\nassert(~isX3Seq(3145728))\r\n\r\n%%\r\nassert(isX3Seq(7114800))\r\n\r\n%%\r\nassert(~isX3Seq(12582912))\r\n\r\n%%\r\nassert(isX3Seq(14865228))","published":true,"deleted":false,"likes_count":0,"comments_count":3,"created_by":46909,"edited_by":46909,"edited_at":"2025-06-02T16:45:27.000Z","deleted_by":null,"deleted_at":null,"solvers_count":2,"test_suite_updated_at":"2025-06-02T03:01:11.000Z","rescore_all_solutions":true,"group_id":1,"created_at":"2025-05-27T13:26:30.000Z","updated_at":"2025-06-06T14:09:48.000Z","published_at":"2025-05-27T13:26:30.000Z","restored_at":null,"restored_by":null,"spam":null,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eMost numbers have interesting properties, if you look hard enough and interpret “interesting” liberally. Let’s choose a number at random—300, say—and list some of its properties:\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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIt is divisible by the square of its largest prime factor. \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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIt is the area of a triangle with integer sides and integer area\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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIt is a folding point of the non-negative integers written in a hexagonal spiral (see below), as are 1, 2, 3, 4, 5, 7, 8, 10, 12, 14, 16, 19, 21, 24, etc. \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eA number that shares these properties is 108: (a) It is divisible by 9, or the square of its largest prime factor (3), (b) it is the area of a triangle with sides 15, 15, and 18, and (c) it is a folding point of the hexagon (it would be to the right of 75 in the hexagon below). \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWrite a function to determine whether a number has the three properties listed above. \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"416\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"487\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"baseline\\\"/\u003e\u003cw:attr w:name=\\\"altText\\\" w:val=\\\"\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image1.png\",\"relationshipId\":\"rId1\"}]},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":2218,"title":"Wayfinding 1 - crossing","description":"This is the first part of a series of assignments about wayfinding. The final goal is to be able to calculate the fastest route through a terrain of areas with different properties. The assignments will build on top of each other, gradually increasing the complexity, but guiding you stepwise towards the final goal. You can re-use code from preceding assignments to save some work.\r\n\r\n*How many times does AB cross another line?*\r\n\r\n\u003c\u003chttp://i60.tinypic.com/mk7us1.png\u003e\u003e\r\n\r\nThe first assignment deals with the problem of finding the lines we cross while going from A to B. The answer will be the number of times the segment AB intersects with the other lines. The other lines are isolated (or intersecting) line segments of two nodes each.  \r\n\r\nThe inputs of the function |WayfindingIntersections(AB,L)| are a matrix |AB| of two columns, each with x-y coordinates, of our straight path from A (1st column) to B (2nd column), and a 3-dimensional matrix |L| of columns with x- and y-coordinates, each column either the start or the end of a line, and with all individual lines concatenated in the 3rd dimension.\r\n\r\n AB = [\r\n   xA xB\r\n   yA yB\r\n ]\r\n\r\n L = cat(3,...\r\n  [ x1_start x1_end\r\n    y1_start y1_end ] ...\r\n   ,...\r\n  [ x2_start x2_end\r\n    y2_start y2_end ] ...\r\n   ,...\r\n  [ x3_start x3_end\r\n    y3_start y3_end ] ... % etc.\r\n  )  \r\n\r\nYour output n will be the number of times the line AB intersects with any of the other lines. The lines will not 'just touch' AB with their begin or end. \r\n\r\np.s. I noticed later on that there is another Cody problem \u003chttp://www.mathworks.nl/matlabcentral/cody/problems/1720-do-the-lines-intersect 1720\u003e that is somewhat similar. But this was a logical start for the series.","description_html":"\u003cp\u003eThis is the first part of a series of assignments about wayfinding. The final goal is to be able to calculate the fastest route through a terrain of areas with different properties. The assignments will build on top of each other, gradually increasing the complexity, but guiding you stepwise towards the final goal. You can re-use code from preceding assignments to save some work.\u003c/p\u003e\u003cp\u003e\u003cb\u003eHow many times does AB cross another line?\u003c/b\u003e\u003c/p\u003e\u003cimg src = \"http://i60.tinypic.com/mk7us1.png\"\u003e\u003cp\u003eThe first assignment deals with the problem of finding the lines we cross while going from A to B. The answer will be the number of times the segment AB intersects with the other lines. The other lines are isolated (or intersecting) line segments of two nodes each.\u003c/p\u003e\u003cp\u003eThe inputs of the function \u003ctt\u003eWayfindingIntersections(AB,L)\u003c/tt\u003e are a matrix \u003ctt\u003eAB\u003c/tt\u003e of two columns, each with x-y coordinates, of our straight path from A (1st column) to B (2nd column), and a 3-dimensional matrix \u003ctt\u003eL\u003c/tt\u003e of columns with x- and y-coordinates, each column either the start or the end of a line, and with all individual lines concatenated in the 3rd dimension.\u003c/p\u003e\u003cpre\u003e AB = [\r\n   xA xB\r\n   yA yB\r\n ]\u003c/pre\u003e\u003cpre\u003e L = cat(3,...\r\n  [ x1_start x1_end\r\n    y1_start y1_end ] ...\r\n   ,...\r\n  [ x2_start x2_end\r\n    y2_start y2_end ] ...\r\n   ,...\r\n  [ x3_start x3_end\r\n    y3_start y3_end ] ... % etc.\r\n  )  \u003c/pre\u003e\u003cp\u003eYour output n will be the number of times the line AB intersects with any of the other lines. The lines will not 'just touch' AB with their begin or end.\u003c/p\u003e\u003cp\u003ep.s. I noticed later on that there is another Cody problem \u003ca href = \"http://www.mathworks.nl/matlabcentral/cody/problems/1720-do-the-lines-intersect\"\u003e1720\u003c/a\u003e that is somewhat similar. But this was a logical start for the series.\u003c/p\u003e","function_template":"function n = WayfindingIntersections(AB,L)\r\n  n = randi(size(L,3)+1)-1;\r\nend","test_suite":"%%\r\nAB = [2 0;0 5];\r\nL = cat(3,...\r\n    [1 0;2 2],...\r\n    [-1 4;3 3],...\r\n    [-3 2;0 2],...\r\n    [2 3;4 2]...\r\n    );\r\nn = WayfindingIntersections(AB,L)\r\nn_correct = 2;\r\nassert(isequal(n,n_correct));\r\n\r\n%\r\nAB = [ 6 -3 ; 5 2 ];\r\nL = cat(3,...\r\n[ 2 2 ; 2 -9 ],...\r\n[ -2 3 ; 8 8 ],...\r\n[ 7 -1 ; 4 6 ],...\r\n[ 7 -3 ; -6 1 ],...\r\n[ -6 -6 ; -1 2 ],...\r\n[ 5 -8 ; 3 4 ],...\r\n[ 3 5 ; -8 -9 ],...\r\n[ 8 -8 ; 4 -3 ],...\r\n[ -7 9 ; -5 9 ],...\r\n[ 6 3 ; 8 3 ],...\r\n[ 0 4 ; 9 -2 ],...\r\n[ -8 0 ; 4 0 ],...\r\n[ 6 8 ; 6 0 ],...\r\n[ -6 2 ; -6 9 ],...\r\n[ 8 -4 ; 1 -5 ],...\r\n[ 5 -1 ; -5 -3 ],...\r\n[ -2 -9 ; 6 -5 ],...\r\n[ 8 6 ; 6 -7 ],...\r\n[ -4 2 ; 5 2 ],...\r\n[ 8 6 ; 0 6 ]...\r\n);\r\nn = WayfindingIntersections(AB,L)\r\nn_correct = 7;\r\nassert(isequal(n,n_correct));\r\n\r\n%\r\nAB = [ -3 -1 ; -3 7 ];\r\nL = cat(3,...\r\n[ 9 8 ; 1 6 ],...\r\n[ -4 -6 ; -3 9 ],...\r\n[ -2 8 ; 7 5 ],...\r\n[ -3 5 ; -8 2 ],...\r\n[ 1 2 ; 3 5 ],...\r\n[ 4 -5 ; -3 -5 ],...\r\n[ 8 5 ; -1 -2 ],...\r\n[ 4 8 ; 3 5 ],...\r\n[ -3 -4 ; 7 8 ],...\r\n[ 9 7 ; -1 -3 ]...\r\n);\r\nn = WayfindingIntersections(AB,L)\r\nn_correct = 1;\r\nassert(isequal(n,n_correct));\r\n\r\n%\r\nAB = [ 5 9 ; -9 0 ];\r\nL = cat(3,...\r\n[ 3 -1 ; 1 -2 ],...\r\n[ -5 3 ; -3 4 ],...\r\n[ -9 -2 ; -3 -7 ],...\r\n[ -6 -5 ; -1 -3 ],...\r\n[ 4 -3 ; 5 -9 ],...\r\n[ -6 -2 ; -4 -4 ],...\r\n[ -1 -7 ; -3 -4 ],...\r\n[ 0 9 ; 6 3 ],...\r\n[ -6 1 ; -7 -8 ],...\r\n[ 6 5 ; 6 5 ],...\r\n[ 5 6 ; -5 -1 ],...\r\n[ 7 9 ; -7 -7 ],...\r\n[ -9 -4 ; -2 -3 ],...\r\n[ 3 5 ; -2 5 ],...\r\n[ -3 -4 ; 5 -6 ]...\r\n);\r\nn = WayfindingIntersections(AB,L)\r\nn_correct = 0;\r\nassert(isequal(n,n_correct));\r\n\r\n%\r\nAB = [ 6 -3 ; 6 -7 ];\r\nL = cat(3,...\r\n[ -7 0 ; -3 0 ],...\r\n[ -1 5 ; -8 0 ],...\r\n[ 8 -5 ; 1 4 ],...\r\n[ -4 -4 ; 7 3 ],...\r\n[ 0 0 ; 4 -5 ],...\r\n[ -2 -3 ; -4 4 ],...\r\n[ 4 -8 ; 2 -5 ],...\r\n[ -7 6 ; 6 3 ],...\r\n[ -2 -7 ; -3 -8 ],...\r\n[ -6 5 ; 8 7 ],...\r\n[ 9 -9 ; 5 -9 ],...\r\n[ 6 8 ; 4 6 ],...\r\n[ 2 7 ; 5 -2 ],...\r\n[ -7 -5 ; -1 -7 ],...\r\n[ -8 -2 ; 0 -6 ]...\r\n);\r\nn = WayfindingIntersections(AB,L)\r\nn_correct = 7;\r\nassert(isequal(n,n_correct));\r\n\r\n%\r\nAB = [ 45 25 ; 23 101 ];\r\nL = cat(3,...\r\n[ 94 6 ; 2 71 ],...\r\n[ 40 -9 ; 51 84 ],...\r\n[ -8 97 ; 72 105 ],...\r\n[ 18 59 ; 36 88 ],...\r\n[ 95 56 ; 10 -6 ],...\r\n[ 61 48 ; 96 22 ],...\r\n[ 12 100 ; 94 16 ],...\r\n[ 103 90 ; 54 106 ],...\r\n[ 108 53 ; 34 68 ],...\r\n[ 9 20 ; 1 7 ],...\r\n[ 76 64 ; -8 106 ],...\r\n[ 60 9 ; 51 69 ],...\r\n[ 75 62 ; 60 -7 ],...\r\n[ 80 -8 ; 70 68 ],...\r\n[ 8 30 ; 68 67 ]...\r\n);\r\nn = WayfindingIntersections(AB,L)\r\nn_correct = 7;\r\nassert(isequal(n,n_correct));\r\n\r\n%\r\nAB = [ -5 -6 ; -2 -6 ];\r\nL = cat(3,...\r\n[ -1 -7 ; -7 -1 ],...\r\n[ -4 -6 ; -6 -5 ],...\r\n[ -7 -2 ; -1 -5 ],...\r\n[ -9 -6 ; -4 -4 ],...\r\n[ -9 -3 ; -3 -2 ],...\r\n[ -2 -1 ; -3 -2 ],...\r\n[ -4 -5 ; -6 -9 ],...\r\n[ -8 -1 ; -4 -6 ],...\r\n[ -1 -5 ; -5 -1 ],...\r\n[ -4 -6 ; -2 -5 ]...\r\n);\r\nn = WayfindingIntersections(AB,L)\r\nn_correct = 6;\r\nassert(isequal(n,n_correct));\r\n\r\n%\r\nAB = [ 1 6 ; 6 7 ];\r\nL = cat(3,...\r\n[ 5 8 ; 2 8 ],...\r\n[ 6 5 ; 3 2 ],...\r\n[ 4 8 ; 6 1 ],...\r\n[ 7 2 ; 7 9 ],...\r\n[ 1 8 ; 1 2 ],...\r\n[ 1 6 ; 1 9 ],...\r\n[ 2 6 ; 1 2 ],...\r\n[ 3 9 ; 2 4 ],...\r\n[ 5 9 ; 2 8 ],...\r\n[ 2 8 ; 2 5 ]...\r\n);\r\nn = WayfindingIntersections(AB,L)\r\nn_correct = 1;\r\nassert(isequal(n,n_correct));","published":true,"deleted":false,"likes_count":1,"comments_count":4,"created_by":6556,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":24,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":26,"created_at":"2014-02-25T14:46:37.000Z","updated_at":"2026-02-19T10:27:05.000Z","published_at":"2014-02-25T14:59:59.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.JPEG\"}],\"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\u003eThis is the first part of a series of assignments about wayfinding. The final goal is to be able to calculate the fastest route through a terrain of areas with different properties. The assignments will build on top of each other, gradually increasing the complexity, but guiding you stepwise towards the final goal. You can re-use code from preceding assignments to save some work.\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\u003eHow many times does AB cross another line?\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\u003eThe first assignment deals with the problem of finding the lines we cross while going from A to B. The answer will be the number of times the segment AB intersects with the other lines. The other lines are isolated (or intersecting) line segments of two nodes each.\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\u003eThe inputs of the function\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\u003eWayfindingIntersections(AB,L)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e are a matrix\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\u003eAB\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e of two columns, each with x-y coordinates, of our straight path from A (1st column) to B (2nd column), and a 3-dimensional matrix\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\u003eL\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e of columns with x- and y-coordinates, each column either the start or the end of a line, and with all individual lines concatenated in the 3rd dimension.\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[ AB = [\\n   xA xB\\n   yA yB\\n ]\\n\\n L = cat(3,...\\n  [ x1_start x1_end\\n    y1_start y1_end ] ...\\n   ,...\\n  [ x2_start x2_end\\n    y2_start y2_end ] ...\\n   ,...\\n  [ x3_start x3_end\\n    y3_start y3_end ] ... % etc.\\n  )]]\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\u003eYour output n will be the number of times the line AB intersects with any of the other lines. The lines will not 'just touch' AB with their begin or end.\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\u003ep.s. I noticed later on that there is another Cody problem\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=\\\"http://www.mathworks.nl/matlabcentral/cody/problems/1720-do-the-lines-intersect\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e1720\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e that is somewhat similar. But this was a logical start for the series.\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.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\"}]}"},{"id":2219,"title":"Wayfinding 2 - traversing","description":"This is the second part of a series of assignments about wayfinding. The final goal is to be able to calculate the fastest route through a terrain of areas with different properties. The assignments will build on top of each other, gradually increasing the complexity, but guiding you stepwise towards the final goal. You can re-use code from preceding assignments to save some work. See \u003chttp://www.mathworks.com/matlabcentral/cody/problems/2218-wayfinding-1-crossing [1]\u003e.\r\n\r\n*How many times does AB cross the boundary of area F?*\r\n\r\n\u003c\u003chttp://i59.tinypic.com/219vz42.png\u003e\u003e\r\n\r\nFor this second assignment in this series you have to calculate how many times we cross the boundary of a single area while going from A to B. Our path from A to B is a straight line. And the area boundary is a closed polygon consisting of a finite number of straight segments.\r\n\r\nThe inputs of the function WayfindingBoundaryCrossing(AB,F) are a matrix AB of two columns, each with x-y coordinates, of our straight path from A (1st column) to B (2nd column), and a matrix F of columns with x- and y-coordinates, each column a subsequent node of the polygon boundary of the area. The last node is connected to the first.\r\n\r\n AB = [\r\n   xA xB\r\n   yA yB\r\n ]\r\n\r\n F = [\r\n  [ x1 x2 ... xn ;\r\n    y1 y2 ... yn ]\r\n\r\nYour output n will be the number of times the line AB crosses the boundary of F. Note that AB may cross the boundary of F at a corner node of F.\r\n","description_html":"\u003cp\u003eThis is the second part of a series of assignments about wayfinding. The final goal is to be able to calculate the fastest route through a terrain of areas with different properties. The assignments will build on top of each other, gradually increasing the complexity, but guiding you stepwise towards the final goal. You can re-use code from preceding assignments to save some work. See \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/2218-wayfinding-1-crossing\"\u003e[1]\u003c/a\u003e.\u003c/p\u003e\u003cp\u003e\u003cb\u003eHow many times does AB cross the boundary of area F?\u003c/b\u003e\u003c/p\u003e\u003cimg src = \"http://i59.tinypic.com/219vz42.png\"\u003e\u003cp\u003eFor this second assignment in this series you have to calculate how many times we cross the boundary of a single area while going from A to B. Our path from A to B is a straight line. And the area boundary is a closed polygon consisting of a finite number of straight segments.\u003c/p\u003e\u003cp\u003eThe inputs of the function WayfindingBoundaryCrossing(AB,F) are a matrix AB of two columns, each with x-y coordinates, of our straight path from A (1st column) to B (2nd column), and a matrix F of columns with x- and y-coordinates, each column a subsequent node of the polygon boundary of the area. The last node is connected to the first.\u003c/p\u003e\u003cpre\u003e AB = [\r\n   xA xB\r\n   yA yB\r\n ]\u003c/pre\u003e\u003cpre\u003e F = [\r\n  [ x1 x2 ... xn ;\r\n    y1 y2 ... yn ]\u003c/pre\u003e\u003cp\u003eYour output n will be the number of times the line AB crosses the boundary of F. Note that AB may cross the boundary of F at a corner node of F.\u003c/p\u003e","function_template":"function n = WayfindingBoundaryCrossing(AB,F)\r\n  n = randi(size(F,2))-1;\r\nend","test_suite":"%%\r\nAB = [ 0 0 ; 6 -8 ];\r\nF = [\r\n      -4    4    4   -4\r\n       2    2   -4   -4\r\n  ];\r\nn = WayfindingBoundaryCrossing(AB,F);\r\nn_correct = 2;\r\nassert(isequal(n,n_correct));\r\n\r\n%%\r\nAB = [ 0 0 ; 4 -6 ];\r\nF = [\r\n      -6    4    0\r\n      -0    2   -4\r\n  ];\r\nn = WayfindingBoundaryCrossing(AB,F);\r\nn_correct = 2;\r\nassert(isequal(n,n_correct));\r\n\r\n%%\r\nAB = [ 6 -6 ; 0 0 ];\r\nF = [\r\n      -8   -8    4\r\n       2   -4   -0\r\n  ];\r\nn = WayfindingBoundaryCrossing(AB,F);\r\nn_correct = 1;\r\nassert(isequal(n,n_correct));\r\n\r\n%%\r\nAB = [ 8 -6 ; 6 -8 ];\r\nF = [\r\n      -6    0   -3    7    9    4    6   -4   -7   -2   -7   -8\r\n      -9   -9    0   -4    1    7   -0    4   -1   -7   -5   -9\r\n  ];\r\nn = WayfindingBoundaryCrossing(AB,F);\r\nn_correct = 7;\r\nassert(isequal(n,n_correct));\r\n\r\n%%\r\nn_correct = randi(9)-1;\r\nAB = [ 0 0 ; n_correct*2-9 -10 ];\r\nF = [\r\n      -2   -2    2    2   -2   -2    2    2   -2   -2    2    2   -2   -2    4    4\r\n      -8   -6   -6   -4   -4   -2   -2   -0   -0    2    2    4    4    6    6   -8\r\n  ];\r\nn = WayfindingBoundaryCrossing(AB,F);\r\nassert(isequal(n,n_correct));","published":true,"deleted":false,"likes_count":3,"comments_count":4,"created_by":6556,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":22,"test_suite_updated_at":"2014-02-26T11:59:09.000Z","rescore_all_solutions":false,"group_id":26,"created_at":"2014-02-25T15:14:11.000Z","updated_at":"2026-02-19T10:33:57.000Z","published_at":"2014-02-26T11:59:09.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.JPEG\"}],\"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\u003eThis is the second part of a series of assignments about wayfinding. The final goal is to be able to calculate the fastest route through a terrain of areas with different properties. The assignments will build on top of each other, gradually increasing the complexity, but guiding you stepwise towards the final goal. You can re-use code from preceding assignments to save some work. See\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=\\\"http://www.mathworks.com/matlabcentral/cody/problems/2218-wayfinding-1-crossing\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e[1]\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\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\u003eHow many times does AB cross the boundary of area F?\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\u003eFor this second assignment in this series you have to calculate how many times we cross the boundary of a single area while going from A to B. Our path from A to B is a straight line. And the area boundary is a closed polygon consisting of a finite number of straight segments.\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\u003eThe inputs of the function WayfindingBoundaryCrossing(AB,F) are a matrix AB of two columns, each with x-y coordinates, of our straight path from A (1st column) to B (2nd column), and a matrix F of columns with x- and y-coordinates, each column a subsequent node of the polygon boundary of the area. The last node is connected to the first.\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[ AB = [\\n   xA xB\\n   yA yB\\n ]\\n\\n F = [\\n  [ x1 x2 ... xn ;\\n    y1 y2 ... yn ]]]\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\u003eYour output n will be the number of times the line AB crosses the boundary of F. Note that AB may cross the boundary of F at a corner node of F.\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.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\"}]}"},{"id":2226,"title":"Wayfinding 4 - Crossing, level 2","description":"This is the fourth part of a series of assignments about wayfinding. The final goal of this series is to be able to calculate the fastest route through a terrain of areas with different properties. The assignments will build on top of each other, gradually increasing the complexity, but guiding you stepwise towards the final goal. You can re-use code from preceding assignments to save some work. See \u003chttp://www.mathworks.com/matlabcentral/cody/problems/2218-wayfinding-1-crossing [1]\u003e\r\n\u003chttp://www.mathworks.nl/matlabcentral/cody/problems/2219-wayfinding-2-traversing [2]\u003e \u003chttp://www.mathworks.nl/matlabcentral/cody/problems/2220-wayfinding-3-passed-areas [3]\u003e. \r\n\r\n*Which areas are traversed?*\r\n\r\n\u003c\u003chttp://i62.tinypic.com/358qa1w.png\u003e\u003e\r\n\r\nFor this fourth assignment in this series you have to calculate which areas are traversed and in which order, while going from A to B. Our path from A to B is a straight line. And the area boundaries are closed polygons consisting of a finite number of straight segments. Quite similar to \u003chttp://www.mathworks.nl/matlabcentral/cody/problems/2220-wayfinding-3-passed-areas assignment 3\u003e.\r\n\r\nHowever, now the areas may overlap. If case of traversing overlapping areas, the area with the highest index in |F| is the one listed.\r\nIf an area is crossed twice, it is listed twice in the returned vector. And if |AB| crosses first for example area |F2|, then |F3|, and then |F2| again, the output vector should contain |[ ... 2 3 2 ... ]|. That would also be the case when |F3| is contained in |F2|. But when |F2| is contained in |F3|, then |F2| is never crossed, as it has a lower index in F than |F3|. Consider the areas non-transparent and stacked on top of each other.\r\n\r\nThe inputs of the function |WayfindingPassed(AB,F)| are a matrix |AB| of two columns, each with x-y coordinates, of our straight path from A (1st column) to B (2nd column), and a cell array |F| of 2-D matrices with columns with x- and y-coordinates, each column a subsequent node of the polygon boundary of the area. The last node is implicitly connected to the first. The index of each area, to be referred to in the output vector, is equal to its position in the cell array F. \r\n\r\n AB = [\r\n   xA xB\r\n   yA yB\r\n ]\r\n\r\n F = {\r\n  [ x11 x12 ... x1n ;\r\n    y11 y12 ... y1n ]\r\n  [ x21 x22 ... x2n ;\r\n    y21 y22 ... y2n ]\r\n }\r\n\r\n\r\nYour output |f| will contain the indices in |F| of the crossed areas, in the correct order. In the example above, the correct answer is |[ 3 1 4 1 4 1]|. Crossing means 'being present in that area', so if A, the start, is in area 3, it is considered as 'crossed'.","description_html":"\u003cp\u003eThis is the fourth part of a series of assignments about wayfinding. The final goal of this series is to be able to calculate the fastest route through a terrain of areas with different properties. The assignments will build on top of each other, gradually increasing the complexity, but guiding you stepwise towards the final goal. You can re-use code from preceding assignments to save some work. See \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/2218-wayfinding-1-crossing\"\u003e[1]\u003c/a\u003e \u003ca href = \"http://www.mathworks.nl/matlabcentral/cody/problems/2219-wayfinding-2-traversing\"\u003e[2]\u003c/a\u003e \u003ca href = \"http://www.mathworks.nl/matlabcentral/cody/problems/2220-wayfinding-3-passed-areas\"\u003e[3]\u003c/a\u003e.\u003c/p\u003e\u003cp\u003e\u003cb\u003eWhich areas are traversed?\u003c/b\u003e\u003c/p\u003e\u003cimg src = \"http://i62.tinypic.com/358qa1w.png\"\u003e\u003cp\u003eFor this fourth assignment in this series you have to calculate which areas are traversed and in which order, while going from A to B. Our path from A to B is a straight line. And the area boundaries are closed polygons consisting of a finite number of straight segments. Quite similar to \u003ca href = \"http://www.mathworks.nl/matlabcentral/cody/problems/2220-wayfinding-3-passed-areas\"\u003eassignment 3\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eHowever, now the areas may overlap. If case of traversing overlapping areas, the area with the highest index in \u003ctt\u003eF\u003c/tt\u003e is the one listed.\r\nIf an area is crossed twice, it is listed twice in the returned vector. And if \u003ctt\u003eAB\u003c/tt\u003e crosses first for example area \u003ctt\u003eF2\u003c/tt\u003e, then \u003ctt\u003eF3\u003c/tt\u003e, and then \u003ctt\u003eF2\u003c/tt\u003e again, the output vector should contain \u003ctt\u003e[ ... 2 3 2 ... ]\u003c/tt\u003e. That would also be the case when \u003ctt\u003eF3\u003c/tt\u003e is contained in \u003ctt\u003eF2\u003c/tt\u003e. But when \u003ctt\u003eF2\u003c/tt\u003e is contained in \u003ctt\u003eF3\u003c/tt\u003e, then \u003ctt\u003eF2\u003c/tt\u003e is never crossed, as it has a lower index in F than \u003ctt\u003eF3\u003c/tt\u003e. Consider the areas non-transparent and stacked on top of each other.\u003c/p\u003e\u003cp\u003eThe inputs of the function \u003ctt\u003eWayfindingPassed(AB,F)\u003c/tt\u003e are a matrix \u003ctt\u003eAB\u003c/tt\u003e of two columns, each with x-y coordinates, of our straight path from A (1st column) to B (2nd column), and a cell array \u003ctt\u003eF\u003c/tt\u003e of 2-D matrices with columns with x- and y-coordinates, each column a subsequent node of the polygon boundary of the area. The last node is implicitly connected to the first. The index of each area, to be referred to in the output vector, is equal to its position in the cell array F.\u003c/p\u003e\u003cpre\u003e AB = [\r\n   xA xB\r\n   yA yB\r\n ]\u003c/pre\u003e\u003cpre\u003e F = {\r\n  [ x11 x12 ... x1n ;\r\n    y11 y12 ... y1n ]\r\n  [ x21 x22 ... x2n ;\r\n    y21 y22 ... y2n ]\r\n }\u003c/pre\u003e\u003cp\u003eYour output \u003ctt\u003ef\u003c/tt\u003e will contain the indices in \u003ctt\u003eF\u003c/tt\u003e of the crossed areas, in the correct order. In the example above, the correct answer is \u003ctt\u003e[ 3 1 4 1 4 1]\u003c/tt\u003e. Crossing means 'being present in that area', so if A, the start, is in area 3, it is considered as 'crossed'.\u003c/p\u003e","function_template":"function f = WayfindingPassed(AB,F)\r\n  f = 1:length(F);\r\nend","test_suite":"%%\r\nAB = [ -10 10 ; -10 10 ];\r\nF{1} = [\r\n    -5    5   -8    0\r\n    -6    2    7    1\r\n    ];\r\nF{2} = [\r\n    4   -2    4    6\r\n    6   -7   -3   -2\r\n    ];\r\nF{3} = [\r\n    -5    6    3   -1\r\n    -6   -8    4   -2\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [ 1 3 2 ];\r\nassert(isequal(f,f_correct));\r\n\r\n%%\r\n\r\nAB = [ 0 21 ; 0 0 ];\r\nf_correct = randperm(20);\r\nF = arrayfun(@(n)[n+[0 1 1 0];-1 -1 1 1],f_correct,'uni',0);\r\nf = WayfindingPassed(AB,F);\r\nassert(isequal(f(f_correct),f_correct(f)));\r\n\r\n%%\r\nAB = [ -10 10 ; -10 10 ];\r\nF{1} = [\r\n    -5    9    0   -4    5\r\n    2    8   -1   -9   -8\r\n    ];\r\nF{2} = [\r\n    -2  -10   -4    0\r\n    8    7   -5    5\r\n    ];\r\nF{3} = [\r\n    -6    2   10\r\n    10   -4    8\r\n    ];\r\nF{4} = [\r\n    -10    8  -10\r\n    4   -8    2\r\n    ];\r\nF{5} = [\r\n    0    4    8   -3    1\r\n    -10    9   -8   -5    2\r\n    ];\r\nF{6} = [\r\n    6    6   -9   10\r\n    6   -3    4   -7\r\n    ];\r\nF{7} = [\r\n    9    7   -7\r\n    0    7   -5\r\n    ];\r\nF{8} = [\r\n    2    0   10\r\n    6  -10    0\r\n    ];\r\nF{9} = [\r\n    -7    2   -7   -7\r\n    3    5   -3    7\r\n    ];\r\nF{10} = [\r\n    -5    6    1    5\r\n    -10    0    8    4\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [ 2 7 8 10 7 3 ];\r\nassert(isequal(f,f_correct));\r\n\r\n%%\r\nAB = [ -10 10 ; -10 10 ];\r\nF{1} = [\r\n    2    5    8    5\r\n    2   -2    9   -5\r\n    ];\r\nF{2} = [\r\n    -8    2   -2    8   -8   -2\r\n    0    4    5   -9    8   -2\r\n    ];\r\nF{3} = [\r\n    5   -6   -2    1    0   10\r\n    10   -8    0   10   -2   -5\r\n    ];\r\nF{4} = [\r\n    10   -4  -10   -2    9\r\n    4    1    8   -4   -1\r\n    ];\r\nF{5} = [\r\n    -9   -7    2   -3\r\n    2   -9   -4    5\r\n    ];\r\nF{6} = [\r\n    -3   10    6    9    4   -2\r\n    10   -6    2    2    5   -5\r\n    ];\r\nF{7} = [\r\n    -1   -5   -5\r\n    3    0   -4\r\n    ];\r\nF{8} = [\r\n    8   -6    8   10   -7\r\n    8   -2   -5    3    7\r\n    ];\r\nF{9} = [\r\n    1  -10   -3   10    5\r\n    -5   -6    3   -6    8\r\n    ];\r\nF{10} = [\r\n    -7    0    8   -8\r\n    7   -8    3    9\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [ 5 9 10 9 3 1 8 ];\r\nassert(isequal(f,f_correct));\r\n\r\n%%\r\n\r\nAB = [ 4 -6 ; 0 0 ];\r\nF{1} = [\r\n    -4   -4    2    2   -2   -3   -3   -2    2    2   -4\r\n    2   -4   -4   -2    2    2   -2   -2    2    4    4\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [ 1 ];\r\nassert(isequal(f,f_correct));\r\n\r\n%%\r\n\r\nAB = [ 0 0 ; 15 -8 ];\r\nF{1} = [\r\n    -4    4    4   -4\r\n    6    2    6    2\r\n    ];\r\nF{2} = [\r\n    -2   -2    6    6   -2\r\n    -0   -4   -0   -4   -0\r\n    ];\r\nF{3} = [\r\n    -1   -1    2    2\r\n    -6   -4   -6   -4\r\n    ];\r\nF{4} = [\r\n    -1    1   -1    1\r\n    -7   -7   -9   -9\r\n    ];\r\nF{5} = [\r\n    -2     2    -1     2    -1     1\r\n    14    10     6     6    10    14\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [ 5 5 1 2 3 4 ];\r\nassert(isequal(f,f_correct));\r\n\r\n%%\r\n\r\nAB = [ 0 0 ; -6 6 ];\r\nF{1} = [\r\n    -5    7    7   -5\r\n    -9   -9    9    9\r\n    ];\r\nF{2} = [\r\n    -1    1    1   -1\r\n    -7   -7   -5   -5\r\n    ];\r\nF{3} = [\r\n    -2   -2    2    2\r\n    4    2    2    4\r\n    ];\r\nF{4} = [\r\n    2    2   -2   -2\r\n    4    2    2    4\r\n    ];\r\nF{5} = [\r\n    -1    1    1   -1\r\n    2    2   -2   -2\r\n    ];\r\nF{6} = [\r\n    -2    0   -2\r\n    -2   -3   -4\r\n    ];\r\nF{7} = [\r\n    0    2    2\r\n    -3   -4   -2\r\n    ];\r\nF{8} = [\r\n    -1    0    1\r\n    -8   -6   -8\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [8 2 1 7 1 5 4 1];\r\nassert(isequal(f,f_correct));\r\n\r\n%%\r\n\r\nAB = [ 2 -2 ; 8 -6 ];\r\nF{1} = [\r\n    -4   -4    4    4\r\n    -4   -0   -0   -4\r\n    ];\r\nF{2} = [\r\n    -4   -4    4    4\r\n    2    6    6    2\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [2 1];\r\nassert(isequal(f,f_correct));\r\n\r\n%%\r\n\r\nAB = [ 8 -4 ; 8 -8 ];\r\nF{1} = [\r\n    -6    2    2   -4   -4    8    8   -6\r\n    -6   -6   -4   -4    2    2    4    4\r\n    ];\r\nF{2} = [\r\n    -2   -2    4    4\r\n    -0   -2   -2   -0\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [ 1 2 1 ];\r\nassert(isequal(f,f_correct));\r\n\r\n%%\r\n\r\nAB = [ -8 8 ; 8 -8 ];\r\nF{1} = [\r\n    -2   -2    0    0\r\n    -0    2    2   -0\r\n    ];\r\nF{2} = [\r\n    2    4    4   -6   -6   -4    2    4    4    2    2   -4   -4    2\r\n    -0   -0   -6   -6    4    6    6    4    2    2    4    4   -4   -4\r\n    ];\r\nF{3} = [\r\n    -3   -3    1    0\r\n    -1   -3   -3   -1\r\n    ];\r\nF{4} = [\r\n    5    9    9    5\r\n    -3   -3   -9   -9\r\n    ];\r\nF{5} = [\r\n    -9  -10  -10   -9\r\n    9    9   10   10\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [ 2 1 2 4 ];\r\nassert(isequal(f,f_correct));\r\n\r\nAB = [ 0 0 ; -8 8 ];\r\nF{1} = [\r\n    -4   -2   -2   -4\r\n    8    8    4    4\r\n    ];\r\nF{2} = [\r\n    2    4    4    2\r\n    -0   -0   -6   -6\r\n    ];\r\nF{3} = [\r\n    -4   -2   -2   -6   -6\r\n    -4   -4   -6   -6   -4\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nassert(isempty(f));\r\n\r\n%%\r\n\r\nAB = [ 7 -8 ; 0 0 ];\r\nF{1} = [\r\n    8    9    9    8\r\n    3    3   -2   -2\r\n    ];\r\nF{2} = [\r\n    -9   -7   -7   -4   -4   -3   -3    0    0    1    1    4    4    5    5   -2   -8   -9\r\n    -2   -2    2    2   -2   -2    2    2   -2   -2    2    2   -2   -2    3    4    3    2\r\n    ];\r\nF{3} = [\r\n    -2   -1   -1   -2\r\n    1    1   -4   -4\r\n    ];\r\nF{4} = [\r\n    -6   -5   -5   -3    1    2    2    3    3    1   -4   -6\r\n    1    1   -3   -5   -5   -4    1    1   -5   -8   -7   -4\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [ 2 4 2 3 2 4 2 ];\r\nassert(isequal(f,f_correct));\r\n\r\n%%\r\n\r\nAB = [ 0 -2 ; 0 -4 ];\r\nF{1} = [\r\n    -3    3    3    2    2   -2   -2    2    2   -3\r\n    -5   -5    3    3   -3   -3    2    2    3    3\r\n    ];\r\nF{2} = [\r\n    -1    1    1   -1\r\n    1    1   -1   -1\r\n    ];\r\nF{3} = [\r\n    -4    4    4    5    5   -5   -5   -4\r\n    4    4   -7   -7    5    5   -1   -1\r\n    ];\r\nF{4} = [\r\n    -5   -4   -4    4    4   -5\r\n    -1   -1   -6   -6   -7   -7\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [ 2 1 ];\r\nassert(isequal(f,f_correct));\r\n\r\n%%\r\n\r\nAB = [ -2 0 ; 6 -6 ];\r\nF{1} = [\r\n    2   -4   -4    2    2   -2    0   -2    2\r\n    -4   -4    4    4    2    2   -0   -2   -2\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [ 1 1 1 ];\r\nassert(isequal(f,f_correct));","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":6556,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":2,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2014-03-01T22:33:13.000Z","updated_at":"2014-03-06T07:49:23.000Z","published_at":"2014-03-06T07:49:23.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.JPEG\"}],\"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\u003eThis is the fourth part of a series of assignments about wayfinding. The final goal of this series is to be able to calculate the fastest route through a terrain of areas with different properties. The assignments will build on top of each other, gradually increasing the complexity, but guiding you stepwise towards the final goal. You can re-use code from preceding assignments to save some work. See\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=\\\"http://www.mathworks.com/matlabcentral/cody/problems/2218-wayfinding-1-crossing\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e[1]\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:hyperlink w:docLocation=\\\"http://www.mathworks.nl/matlabcentral/cody/problems/2219-wayfinding-2-traversing\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e[2]\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:hyperlink w:docLocation=\\\"http://www.mathworks.nl/matlabcentral/cody/problems/2220-wayfinding-3-passed-areas\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e[3]\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\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\u003eWhich areas are traversed?\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\u003eFor this fourth assignment in this series you have to calculate which areas are traversed and in which order, while going from A to B. Our path from A to B is a straight line. And the area boundaries are closed polygons consisting of a finite number of straight segments. Quite similar to\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=\\\"http://www.mathworks.nl/matlabcentral/cody/problems/2220-wayfinding-3-passed-areas\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eassignment 3\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\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\u003eHowever, now the areas may overlap. If case of traversing overlapping areas, the area with the highest index in\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\u003eF\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is the one listed. If an area is crossed twice, it is listed twice in the returned vector. And if\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\u003eAB\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e crosses first for example area\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\u003eF2\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, then\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\u003eF3\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, and then\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\u003eF2\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e again, the output vector should contain\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\u003e[ ... 2 3 2 ... ]\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. That would also be the case when\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\u003eF3\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is contained in\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\u003eF2\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. But when\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\u003eF2\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is contained in\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\u003eF3\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, then\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\u003eF2\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is never crossed, as it has a lower index in F than\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\u003eF3\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. Consider the areas non-transparent and stacked on top of each other.\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\u003eThe inputs of the function\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\u003eWayfindingPassed(AB,F)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e are a matrix\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\u003eAB\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e of two columns, each with x-y coordinates, of our straight path from A (1st column) to B (2nd column), and a cell array\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\u003eF\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e of 2-D matrices with columns with x- and y-coordinates, each column a subsequent node of the polygon boundary of the area. The last node is implicitly connected to the first. The index of each area, to be referred to in the output vector, is equal to its position in the cell array F.\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[ AB = [\\n   xA xB\\n   yA yB\\n ]\\n\\n F = {\\n  [ x11 x12 ... x1n ;\\n    y11 y12 ... y1n ]\\n  [ x21 x22 ... x2n ;\\n    y21 y22 ... y2n ]\\n }]]\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\u003eYour output\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\u003ef\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e will contain the indices in\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\u003eF\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e of the crossed areas, in the correct order. In the example above, the correct answer is\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\u003e[ 3 1 4 1 4 1]\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. Crossing means 'being present in that area', so if A, the start, is in area 3, it is considered as 'crossed'.\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.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\"}]}"}],"problem_search":{"errors":[],"problems":[{"id":45196,"title":"Determine whether a given point is inside or outside a polygon","description":"A closed polygon may be described by an N x 2 array of nodes, where the last node and the first node are the same. Each row of the array is a 2-element vector giving the x and y coordinates of a node. The polygon is described by straight-line segments that go from node to node.\r\nIn this problem, we provide you with a polygon p of this type, and with a number of points r, each having an x and y coordinate. You are to determine whether each point falls inside or outside the polygon. If the point is inside the polygon, return the value 1. If outside, return the value 0.\r\nHINT: One way to solve this is to find a point 'p_test' that is outside of the polygon, and then to count the number of times that a line from 'r' to 'p_test' crosses the sides of the polygon.","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.4333px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 186px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 93px; transform-origin: 407px 93px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 63px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 31.5px; text-align: left; transform-origin: 384px 31.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 384px 8px; transform-origin: 384px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eA closed polygon may be described by an N x 2 array of nodes, where the last node and the first node are the same. Each row of the array is a 2-element vector giving the x and y coordinates of a node. The polygon is described by straight-line segments that go from node to node.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 63px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 31.5px; text-align: left; transform-origin: 384px 31.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 361px 8px; transform-origin: 361px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eIn this problem, we provide you with a polygon p of this type, and with a number of points r, each having an x and y coordinate. You are to determine whether each point falls inside or outside the polygon. If the point is inside the polygon, return the value 1. If outside, return the value 0.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 21px; text-align: left; transform-origin: 384px 21px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 380.5px 8px; transform-origin: 380.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eHINT: One way to solve this is to find a point 'p_test' that is outside of the polygon, and then to count the number of times that a line from 'r' to 'p_test' crosses the sides of the polygon.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function InOut = inOrOut(p,r)\r\n% inOrOut() Determines whether point r is inside (InOut = 1) or \r\n% outside (InOut = 0) polygon p\r\n    InOut = 0;\r\nend\r\n","test_suite":"p = [0,0; 0,100; 5,10; 10,100; 15,20; 20,100; 25,30; 30,100; ...\r\n    35,40; 40,100; 45,50; 50,100; 50,0; 0,0];\r\n%%\r\nr = [44.28, 60.99];\r\np = [0,0; 0,100; 5,10; 10,100; 15,20; 20,100; 25,30; 30,100; ...\r\n    35,40; 40,100; 45,50; 50,100; 50,0; 0,0];\r\ny_correct = 0;\r\nassert(inOrOut(p,r) == y_correct);\r\n%%\r\nr = [38.33, 57.67];\r\ny_correct = 1;\r\nassert(inOrOut(p,r) == y_correct);\r\n%%\r\nr = [0.98, 23.99];\r\ny_correct = 1;\r\nassert(inOrOut(p,r) == y_correct);\r\n%%\r\nr = [27.07, 95.94];\r\ny_correct = 0;\r\nassert(inOrOut(p,r) == y_correct);\r\n%%\r\nr = [ -7.45, 7.14];\r\ny_correct = 0;\r\nassert(inOrOut(p,r) == y_correct);\r\n%%\r\nr = [43.19, 2.87];\r\ny_correct = 1;\r\nassert(inOrOut(p,r) == y_correct);\r\n%%\r\nr = [19.39, 16.79];\r\ny_correct = 1;\r\nassert(inOrOut(p,r) == y_correct);\r\n%%\r\nr = [48.72, 71.27];\r\ny_correct = 1;\r\nassert(inOrOut(p,r) == y_correct);\r\n%%\r\nr = [-6.42, 68.20];\r\ny_correct = 0;\r\nassert(inOrOut(p,r) == y_correct);\r\n%%\r\nr = [20.03, 47.11];\r\ny_correct = 1;\r\nassert(inOrOut(p,r) == y_correct);\r\n","published":true,"deleted":false,"likes_count":4,"comments_count":2,"created_by":8580,"edited_by":223089,"edited_at":"2022-09-09T08:55:17.000Z","deleted_by":null,"deleted_at":null,"solvers_count":33,"test_suite_updated_at":"2022-09-09T08:55:17.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2019-11-06T23:11:51.000Z","updated_at":"2026-01-23T09:40:37.000Z","published_at":"2019-11-06T23:20:58.000Z","restored_at":null,"restored_by":null,"spam":null,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eA closed polygon may be described by an N x 2 array of nodes, where the last node and the first node are the same. Each row of the array is a 2-element vector giving the x and y coordinates of a node. The polygon is described by straight-line segments that go from node to node.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIn this problem, we provide you with a polygon p of this type, and with a number of points r, each having an x and y coordinate. You are to determine whether each point falls inside or outside the polygon. If the point is inside the polygon, return the value 1. If outside, return the value 0.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eHINT: One way to solve this is to find a point 'p_test' that is outside of the polygon, and then to count the number of times that a line from 'r' to 'p_test' crosses the sides of the polygon.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":1720,"title":"Do the line-segments intersect?","description":"You are given two line segments. Do they cross?\r\nConsider one segment as (x1,y1) to (x2,y2), the other segment as (x3,y3) to (x4,y4). You are given a = [x1 y1; x2 y2]; b = [x3 y3; x4 y4]. Return tf=true if a and b intersect or tf=false if a and b do not touch.\r\nWhen lines do intersect they will do so cleanly at exactly one non-endpoint. That is, they will not nest, overlap, or \"kiss\" at the endpoints.\r\nExamples\r\n a = [0,0; 1,1];\r\n b = [0,1; 1,0];\r\n tf = true\r\n\r\n a = [0,0; 1,0];\r\n b = [0,1; 1,1];\r\n tf = false","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.4333px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 306.033px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 153.017px; transform-origin: 407px 153.017px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 153px 8px; transform-origin: 153px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eYou are given two line segments. Do they cross?\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 21px; text-align: left; transform-origin: 384px 21px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 380.5px 8px; transform-origin: 380.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eConsider one segment as (x1,y1) to (x2,y2), the other segment as (x3,y3) to (x4,y4). You are given a = [x1 y1; x2 y2]; b = [x3 y3; x4 y4]. Return tf=true if a and b intersect or tf=false if a and b do not touch.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 21px; text-align: left; transform-origin: 384px 21px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 382px 8px; transform-origin: 382px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWhen lines do intersect they will do so cleanly at exactly one non-endpoint. That is, they will not nest, overlap, or \"kiss\" at the endpoints.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 30px 8px; transform-origin: 30px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eExamples\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 143.033px; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-end-end-radius: 4px; border-end-start-radius: 4px; border-start-end-radius: 4px; border-start-start-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; margin-block-end: 10px; margin-block-start: 10px; margin-bottom: 10px; margin-inline-end: 3px; margin-inline-start: 3px; margin-left: 3px; margin-right: 3px; margin-top: 10px; perspective-origin: 404px 71.5167px; transform-origin: 404px 71.5167px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 64px 8.5px; tab-size: 4; transform-origin: 64px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e a = [0,0; 1,1];\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 64px 8.5px; tab-size: 4; transform-origin: 64px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e b = [0,1; 1,0];\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 40px 8.5px; tab-size: 4; transform-origin: 40px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e tf = true\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 8.5px; tab-size: 4; transform-origin: 0px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 64px 8.5px; tab-size: 4; transform-origin: 64px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e a = [0,0; 1,0];\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 64px 8.5px; tab-size: 4; transform-origin: 64px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e b = [0,1; 1,1];\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 44px 8.5px; tab-size: 4; transform-origin: 44px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e tf = false\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function tf = intersecting(a,b)\r\n  tf = [];\r\nend","test_suite":"%%\r\na = [0,0; 1,1];\r\nb = [0,1; 1,0];\r\ntf_correct = true;\r\nassert(isequal(intersecting(a,b),tf_correct ))\r\n\r\n%%\r\na = [0,0; 1,1];\r\nb = [1,0; 0,1];\r\ntf_correct = true;\r\nassert(isequal(intersecting(a,b),tf_correct ))\r\n\r\n%%\r\na = [0,0; 1,0];\r\nb = [0,1; 1,1];\r\ntf_correct = false;\r\nassert(isequal(intersecting(a,b),tf_correct ))\r\n\r\n%%\r\na = [0,0; 1,0];\r\nb = [2,0; 3,0];\r\ntf_correct = false;\r\nassert(isequal(intersecting(a,b),tf_correct ))\r\n\r\n%%\r\na = [4 3;6 8];\r\nb = [3 7;6 9];\r\ntf_correct = false;\r\nassert(isequal(intersecting(a,b),tf_correct ))\r\n\r\n%%\r\na = [6 2;6 9];\r\nb = [7 6;4 5];\r\ntf_correct = true;\r\nassert(isequal(intersecting(a,b),tf_correct ))\r\n\r\n%%\r\na = [3 -3;-2 -2];\r\nb = [-1 1;0 -4];\r\ntf_correct = true;\r\nassert(isequal(intersecting(a,b),tf_correct ))\r\n\r\n","published":true,"deleted":false,"likes_count":2,"comments_count":5,"created_by":7,"edited_by":223089,"edited_at":"2022-07-11T06:33:54.000Z","deleted_by":null,"deleted_at":null,"solvers_count":77,"test_suite_updated_at":"2022-07-11T06:33:54.000Z","rescore_all_solutions":false,"group_id":26,"created_at":"2013-07-16T20:37:41.000Z","updated_at":"2026-02-19T10:15:21.000Z","published_at":"2013-07-16T20:57:36.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYou are given two line segments. Do they cross?\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eConsider one segment as (x1,y1) to (x2,y2), the other segment as (x3,y3) to (x4,y4). You are given a = [x1 y1; x2 y2]; b = [x3 y3; x4 y4]. Return tf=true if a and b intersect or tf=false if a and b do not touch.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWhen lines do intersect they will do so cleanly at exactly one non-endpoint. That is, they will not nest, overlap, or \\\"kiss\\\" at the endpoints.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eExamples\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[ a = [0,0; 1,1];\\n b = [0,1; 1,0];\\n tf = true\\n\\n a = [0,0; 1,0];\\n b = [0,1; 1,1];\\n tf = false]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":2220,"title":"Wayfinding 3 - passed areas","description":"This is the third part of a series of assignments about wayfinding. The final goal of this series is to be able to calculate the fastest route through a terrain of areas with different properties. The assignments will build on top of each other, gradually increasing the complexity, but guiding you stepwise towards the final goal. You can re-use code from preceding assignments to save some work. See \u003chttp://www.mathworks.com/matlabcentral/cody/problems/2218-wayfinding-1-crossing [1]\u003e\r\n\u003chttp://www.mathworks.nl/matlabcentral/cody/problems/2219-wayfinding-2-traversing [2]\u003e . \r\n\r\n*Which areas are traversed?*\r\n\r\n\u003c\u003chttp://i58.tinypic.com/263wzdt.png\u003e\u003e\r\n\r\nFor this third assignment in this series you have to calculate which areas are traversed and in which order, while going from A to B. Our path from A to B is a straight line. And the area boundaries are closed polygons consisting of a finite number of straight segments.\r\n\r\nIn this assignments, the areas do not overlap. If an area is crossed twice, it is listed twice in the returned vector. And if |AB| crosses first for example area |F2|, then |F3|, and then |F2| again, the output vector should contain |[ ... 2 3 2 ... ]|. Simple.\r\n\r\nThe inputs of the function |WayfindingPassed(AB,F)| are a matrix |AB| of two columns, each with x-y coordinates, of our straight path from A (1st column) to B (2nd column), and a cell array |F| of 2-D matrices with columns with x- and y-coordinates, each column a subsequent node of the polygon boundary of the area. The last node is implicitly connected to the first. The index of each area, to be referred to in the output vector, is equal to its position in the cell array F. \r\n\r\n AB = [\r\n   xA xB\r\n   yA yB\r\n ]\r\n\r\n F = {\r\n  [ x11 x12 ... x1n ;\r\n    y11 y12 ... y1n ]\r\n  [ x21 x22 ... x2n ;\r\n    y21 y22 ... y2n ]\r\n }\r\n\r\n\r\nYour output |v| will contain the indices in |F| of the crossed areas, in the correct order. In the example above, the correct answer is |[ 3 4 4 1 1]|. Crossing means 'being present in that area', so if A, the start, is in area 3, it is considered as 'crossed'. If you pass the same area multiple times, and leave it in between, each event is listed.\r\n","description_html":"\u003cp\u003eThis is the third part of a series of assignments about wayfinding. The final goal of this series is to be able to calculate the fastest route through a terrain of areas with different properties. The assignments will build on top of each other, gradually increasing the complexity, but guiding you stepwise towards the final goal. You can re-use code from preceding assignments to save some work. See \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/2218-wayfinding-1-crossing\"\u003e[1]\u003c/a\u003e \u003ca href = \"http://www.mathworks.nl/matlabcentral/cody/problems/2219-wayfinding-2-traversing\"\u003e[2]\u003c/a\u003e .\u003c/p\u003e\u003cp\u003e\u003cb\u003eWhich areas are traversed?\u003c/b\u003e\u003c/p\u003e\u003cimg src = \"http://i58.tinypic.com/263wzdt.png\"\u003e\u003cp\u003eFor this third assignment in this series you have to calculate which areas are traversed and in which order, while going from A to B. Our path from A to B is a straight line. And the area boundaries are closed polygons consisting of a finite number of straight segments.\u003c/p\u003e\u003cp\u003eIn this assignments, the areas do not overlap. If an area is crossed twice, it is listed twice in the returned vector. And if \u003ctt\u003eAB\u003c/tt\u003e crosses first for example area \u003ctt\u003eF2\u003c/tt\u003e, then \u003ctt\u003eF3\u003c/tt\u003e, and then \u003ctt\u003eF2\u003c/tt\u003e again, the output vector should contain \u003ctt\u003e[ ... 2 3 2 ... ]\u003c/tt\u003e. Simple.\u003c/p\u003e\u003cp\u003eThe inputs of the function \u003ctt\u003eWayfindingPassed(AB,F)\u003c/tt\u003e are a matrix \u003ctt\u003eAB\u003c/tt\u003e of two columns, each with x-y coordinates, of our straight path from A (1st column) to B (2nd column), and a cell array \u003ctt\u003eF\u003c/tt\u003e of 2-D matrices with columns with x- and y-coordinates, each column a subsequent node of the polygon boundary of the area. The last node is implicitly connected to the first. The index of each area, to be referred to in the output vector, is equal to its position in the cell array F.\u003c/p\u003e\u003cpre\u003e AB = [\r\n   xA xB\r\n   yA yB\r\n ]\u003c/pre\u003e\u003cpre\u003e F = {\r\n  [ x11 x12 ... x1n ;\r\n    y11 y12 ... y1n ]\r\n  [ x21 x22 ... x2n ;\r\n    y21 y22 ... y2n ]\r\n }\u003c/pre\u003e\u003cp\u003eYour output \u003ctt\u003ev\u003c/tt\u003e will contain the indices in \u003ctt\u003eF\u003c/tt\u003e of the crossed areas, in the correct order. In the example above, the correct answer is \u003ctt\u003e[ 3 4 4 1 1]\u003c/tt\u003e. Crossing means 'being present in that area', so if A, the start, is in area 3, it is considered as 'crossed'. If you pass the same area multiple times, and leave it in between, each event is listed.\u003c/p\u003e","function_template":"function f = WayfindingPassed(AB,F)\r\n  f = 1:length(F);\r\nend","test_suite":"    %%\r\n\r\n    AB = [ 2 -2 ; 8 -6 ];\r\n    F{1} = [\r\n        -4   -4    4    4\r\n        -4   -0   -0   -4\r\n        ];\r\n    F{2} = [\r\n        -4   -4    4    4\r\n        2    6    6    2\r\n        ];\r\n    f = WayfindingPassed(AB,F);\r\n    f_correct = [2 1];\r\n    assert(isequal(f,f_correct));\r\n    \r\n    %%\r\n\r\n    AB = [ 8 -4 ; 8 -8 ];\r\n    F{1} = [\r\n        -6    2    2   -4   -4    8    8   -6\r\n        -6   -6   -4   -4    2    2    4    4\r\n        ];\r\n    F{2} = [\r\n        -2   -2    4    4\r\n        -0   -2   -2   -0\r\n        ];\r\n    f = WayfindingPassed(AB,F);\r\n    f_correct = [ 1 2 1 ];\r\n    assert(isequal(f,f_correct));\r\n    \r\n    %%\r\n\r\n    AB = [ -8 8 ; 8 -8 ];\r\n    F{1} = [\r\n        -2   -2    0    0\r\n        -0    2    2   -0\r\n        ];\r\n    F{2} = [\r\n        2    4    4   -6   -6   -4    2    4    4    2    2   -4   -4    2\r\n        -0   -0   -6   -6    4    6    6    4    2    2    4    4   -4   -4\r\n        ];\r\n    F{3} = [\r\n        -3   -3    1    0\r\n        -1   -3   -3   -1\r\n        ];\r\n    F{4} = [\r\n        5    9    9    5\r\n        -3   -3   -9   -9\r\n        ];\r\n    F{5} = [\r\n        -9  -10  -10   -9\r\n        9    9   10   10\r\n        ];\r\n    f = WayfindingPassed(AB,F);\r\n    f_correct = [ 2 1 2 4 ];\r\n    assert(isequal(f,f_correct));\r\n    \r\n    AB = [ 0 0 ; -8 8 ];\r\n    F{1} = [\r\n        -4   -2   -2   -4\r\n        8    8    4    4\r\n        ];\r\n    F{2} = [\r\n        2    4    4    2\r\n        -0   -0   -6   -6\r\n        ];\r\n    F{3} = [\r\n        -4   -2   -2   -6   -6\r\n        -4   -4   -6   -6   -4\r\n        ];\r\n    f = WayfindingPassed(AB,F);\r\n    assert(isempty(f));\r\n    \r\n    %%\r\n\r\n    AB = [ 7 -8 ; 0 0 ];\r\n    F{1} = [\r\n        8    9    9    8\r\n        3    3   -2   -2\r\n        ];\r\n    F{2} = [\r\n        -9   -7   -7   -4   -4   -3   -3    0    0    1    1    4    4    5    5   -2   -8   -9\r\n        -2   -2    2    2   -2   -2    2    2   -2   -2    2    2   -2   -2    3    4    3    2\r\n        ];\r\n    F{3} = [\r\n        -2   -1   -1   -2\r\n        1    1   -4   -4\r\n        ];\r\n    F{4} = [\r\n        -6   -5   -5   -3    1    2    2    3    3    1   -4   -6\r\n        1    1   -3   -5   -5   -4    1    1   -5   -8   -7   -4\r\n        ];\r\n    f = WayfindingPassed(AB,F);\r\n    f_correct = [ 2 4 2 3 2 4 2 ];\r\n    assert(isequal(f,f_correct));\r\n    \r\n    %%\r\n\r\n    AB = [ 0 -2 ; 0 -4 ];\r\n    F{1} = [\r\n        -3    3    3    2    2   -2   -2    2    2   -3\r\n        -5   -5    3    3   -3   -3    2    2    3    3\r\n        ];\r\n    F{2} = [\r\n        -1    1    1   -1\r\n        1    1   -1   -1\r\n        ];\r\n    F{3} = [\r\n        -4    4    4    5    5   -5   -5   -4\r\n        4    4   -7   -7    5    5   -1   -1\r\n        ];\r\n    F{4} = [\r\n        -5   -4   -4    4    4   -5\r\n        -1   -1   -6   -6   -7   -7\r\n        ];\r\n    f = WayfindingPassed(AB,F);\r\n    f_correct = [ 2 1 ];\r\n    assert(isequal(f,f_correct));\r\n    \r\n    %%\r\n\r\n    AB = [ -2 0 ; 6 -6 ];\r\n    F{1} = [\r\n        2   -4   -4    2    2   -2    0   -2    2\r\n        -4   -4    4    4    2    2   -0   -2   -2\r\n        ];\r\n    f = WayfindingPassed(AB,F);\r\n    f_correct = [ 1 1 1 ];\r\n    assert(isequal(f,f_correct));","published":true,"deleted":false,"likes_count":1,"comments_count":5,"created_by":6556,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":16,"test_suite_updated_at":"2014-03-03T12:10:50.000Z","rescore_all_solutions":false,"group_id":26,"created_at":"2014-02-25T23:45:22.000Z","updated_at":"2026-02-19T10:36:52.000Z","published_at":"2014-03-03T09:46:27.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.JPEG\"}],\"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\u003eThis is the third part of a series of assignments about wayfinding. The final goal of this series is to be able to calculate the fastest route through a terrain of areas with different properties. The assignments will build on top of each other, gradually increasing the complexity, but guiding you stepwise towards the final goal. You can re-use code from preceding assignments to save some work. See\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=\\\"http://www.mathworks.com/matlabcentral/cody/problems/2218-wayfinding-1-crossing\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e[1]\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:hyperlink w:docLocation=\\\"http://www.mathworks.nl/matlabcentral/cody/problems/2219-wayfinding-2-traversing\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e[2]\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\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\u003eWhich areas are traversed?\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\u003eFor this third assignment in this series you have to calculate which areas are traversed and in which order, while going from A to B. Our path from A to B is a straight line. And the area boundaries are closed polygons consisting of a finite number of straight segments.\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\u003eIn this assignments, the areas do not overlap. If an area is crossed twice, it is listed twice in the returned vector. And if\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\u003eAB\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e crosses first for example area\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\u003eF2\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, then\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\u003eF3\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, and then\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\u003eF2\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e again, the output vector should contain\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\u003e[ ... 2 3 2 ... ]\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. Simple.\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\u003eThe inputs of the function\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\u003eWayfindingPassed(AB,F)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e are a matrix\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\u003eAB\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e of two columns, each with x-y coordinates, of our straight path from A (1st column) to B (2nd column), and a cell array\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\u003eF\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e of 2-D matrices with columns with x- and y-coordinates, each column a subsequent node of the polygon boundary of the area. The last node is implicitly connected to the first. The index of each area, to be referred to in the output vector, is equal to its position in the cell array F.\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[ AB = [\\n   xA xB\\n   yA yB\\n ]\\n\\n F = {\\n  [ x11 x12 ... x1n ;\\n    y11 y12 ... y1n ]\\n  [ x21 x22 ... x2n ;\\n    y21 y22 ... y2n ]\\n }]]\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\u003eYour output\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\u003ev\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e will contain the indices in\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\u003eF\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e of the crossed areas, in the correct order. In the example above, the correct answer is\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\u003e[ 3 4 4 1 1]\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. Crossing means 'being present in that area', so if A, the start, is in area 3, it is considered as 'crossed'. If you pass the same area multiple times, and leave it in between, each event is listed.\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.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\"}]}"},{"id":58852,"title":"Intersection(s) of Circles","description":"Do two given circles intersect in Zero, One, or Two points and provide the intersection(s). The Stafford method may provide some guidance and alternate solution method. I will elaborate a more geometric solution utilizing Matlab specific functions, rotation matrix, and translation matrix. Assumption is that Matlab function circcirc is not available.\r\nGiven circles [x1,y1,R] and [x2,y2,P] return the intersections [], [x y], or [x y;x y].\r\nThe below figure is created based upon d=distance([x1,y1],[x2,y2]), translating (x1,y1) to (0,0), and rotating (x2,y2) to be on the Y-axis. From this manipulation two right triangles are apparent: [X,Y,R] and [X,d-Y,P]. Subtracting and simplifying these triangles leads to Y and two X values after substituting back into R^2=X^+Y^2 equation.\r\nP^2=X^2+(d-Y)^2  and R^2=X^2+Y^2  after subtraction gives R^2-P^2=Y^2-(d-Y)^2 = Y^2-d^2+2dY-Y^2=2dY-d^2 thus\r\nY=(R^2-P^2+d^2)/(2d)  and X=+/- (R^2-Y^2)^.5\r\nThe trick is to now un-rotate and translate this solution matrix using t=atan2(dx,dy), [cos(t) -sin(t);sin(t) cos(t)] and [x1 y1]\r\n\r\n \r\nDiagram showing a normalization of posed problem where (x1,y1) is placed at origin and (x2,y2) is placed on Y-axis at distance d. Final (x,y) values will require rotation and shifting.","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.4333px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 1000.5px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 500.25px; transform-origin: 407px 500.25px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 63px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 31.5px; text-align: left; transform-origin: 384px 31.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 296px 8px; transform-origin: 296px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eDo two given circles intersect in Zero, One, or Two points and provide the intersection(s). The \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/answers/196755-fsolve-to-find-circle-intersections\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eStafford\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 42.5px 8px; transform-origin: 42.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e method may provide some guidance and alternate solution method. I will elaborate a more geometric solution utilizing Matlab specific functions, rotation matrix, and translation matrix. Assumption is that Matlab function circcirc is not available.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 248px 8px; transform-origin: 248px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eGiven circles [x1,y1,R] and [x2,y2,P] return the intersections [], [x y], or [x y;x y].\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 63px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 31.5px; text-align: left; transform-origin: 384px 31.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 380.5px 8px; transform-origin: 380.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe below figure is created based upon d=distance([x1,y1],[x2,y2]), translating (x1,y1) to (0,0), and rotating (x2,y2) to be on the Y-axis. From this manipulation two right triangles are apparent: [X,Y,R] and [X,d-Y,P]. Subtracting and simplifying these triangles leads to Y and two X values after substituting back into R^2=X^+Y^2 equation.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 358px 8px; transform-origin: 358px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eP^2=X^2+(d-Y)^2  and R^2=X^2+Y^2  after subtraction gives R^2-P^2=Y^2-(d-Y)^2 = Y^2-d^2+2dY-Y^2=2dY-d^2 thus\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 143px 8px; transform-origin: 143px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eY=(R^2-P^2+d^2)/(2d)  and X=+/- (R^2-Y^2)^.5\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 379px 8px; transform-origin: 379px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe trick is to now un-rotate and translate this solution matrix using t=atan2(dx,dy), [cos(t) -sin(t);sin(t) cos(t)] and [x1 y1]\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 8px; transform-origin: 0px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 655.5px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 327.75px; text-align: left; transform-origin: 384px 327.75px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: baseline;width: 482px;height: 650px\" src=\"data:image/png;base64,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I3hL9+7dhRArVqxIasDGZme8GXJjUp8DUNGLl5whEn6l6Mg9N6n91NKdFHaT9xuAZPr+6hRqwoQJQojgr89xPPjgg0KIRx555N577xVCzJgxI86D77zzTiHEunXrjHdPnDjRsmXL//zP/wx9TGNjoxBiyJAhqY08ZCrs3o3QamJqyH+wXBI/mlh7buL7qQ07qV70PaS79wio788s1JAhQ4QQJ06cCN7S2Nh4/GTB27t06ZKZmSmEuPrqq+N/2o8//lgIMWHCBOPdsrIyIcQf//jHsIe1bNmyTZs2KQw7tMGpHMOQGDJsryROr0TuuYbE91Ord1Lt6HtIZ1Fabz6fTwiRkZERvOXVV19tfjLjdq/XO3fuXOPxTz/9dPxP26VLl86dOy9ZssTv9wshFi1a1KJFi5EjR4Y9LDMz88iRI8mO+eTLsiz5W8WIJPtQ4zRfnjE49L/g75QJbsWRe64h8f3U0p0UdiLDTvPjH/94yMmCd82cOdN4Y8qUKU1+np///Od1dXUrVqyoqal55513Ro0aZfyGHsbrTX0TMhIcoMTQisfjOZj3/TN92xxY3ubAchOvb0h8P7VhJ4UNwn8Xg15OPfVUIUR9fX3wIo5evXoFn64QauHChcuWLZs4ceKJEyf+8Ic/vPLKK2PGjInzmceMGXPvvfcuWbLkwIEDfr//5z//eeRjjh49muwLAEV9lnAgEAgG2HgjwFVbUJLH4/nyjMHBd9scWB58OxD4bvP2eJq+6jByzzUktZ9atJPCZvyWpDdjB1u/fn38h+3bt++OO+5o167d9OnTf//737dt2/b222/ft29fnA/JyckpKCh46623Vq5cedZZZ0Wmvba21ufznX/++YmPNs5c11joC3lkKn8kEbDUwbyCWA02BDfhJjfeqHtusvupFTsp7EeG9WbseNu3b4//sKKiovr6+gULFmRlZWVlZS1YsKC+vr64uNi4969//avH47n22mvDPurWW289evToihUrov6WvXbtWiFE3759Uxh2rLlC2CTYzSVes2ZNeXl5eXl5dXV1/EdWV1cbj/zggw/sGZsLRV2ITucTRt1zU9hPrdtJYRsyrLd+/fq1bt161apVcR7z6KOPbty4ccKECZdffrlxy4ABA26++eaKiopp06bF+cArr7yydevWQoibbrop8t533nnH6/WGnnuOL8EXrWRabPji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bNy48YMPPrjzzjtlD+R7Z5xxxk9/+lPj7b17965evXrAgAESx6POhh1Kte9SkGpblJr7nWrHqMhDupqbfZNclGGvN8o/trGxMfSMS7NmzQLy/uTUpk2bfvCDH5x++unZ2dn/93//d/ToUVkjCdq1a9eqVas6depUWVlZVlb24osvrlu3Tu6Q/vGPf5SUlMycOVPuMGKprq6++eabJ06c2LFjR4nDUGrDjqTId8mg4Bal4H5nUOoYFXlIV3yzj8XJGX7ssce6du3atWvX3r17x3pMZmam3+8PvtvY2NisWTNbRifEySN89913P/roo7KyslGjRs2bN08IMX/+fNtGEmtU7dq1O/PMM4uKioQQ+fn5AwYMWLlypdwhPfnkk+eff/7nn3++du3aQ4cObdu2TdYvvJEbWGVl5ZAhQ0aPHj1x4kQpQwqSu2HHp853yaDOFhWkyH4XRp1jVCwqb/ZxqHKNohVGjhzZv39/IUScn8SPfvSjrVu3Bt+tq6uz8xxM6Ai/+OKL/Pz84FDbtWu3f/9+20YSa1R1dXWhd8napkOH9Le//e3rr78uLS0VQhw4cGDt2rWnnnpqfn6+3FEJId5///277rpr2rRpV111lf2DCSN3w45Dqe+SITc3V5EtKujf//3fQ99VpCV1dXWKHKNiUXazb4LkS8Rst2bNmtArpRsbG3v16rVmzZpAILBz584LL7zw66+/ljKwTz/99MILL/zss88CgcDf//73a665ZtmyZVJGEsrn83Xv3n316tWBQOCbb77p3bt3RUWF7EF975ZbblHhutZAIPD5559ffPHFq1ev9v1LQ0ODxPGos2GHUu27FEmRLUrN/U7NY1ToIV3Nzb5JTp4NJ8Lr9T711FP33HNP+/btt27dOn36dFnPSe/YseNDDz00fPjwTp06bd26ddiwYUOHDpUyklD/9m//9txzz913330vvvjirl27xo0bp8fz8GxXWlr67bffTpgwIXjLqFGjHn74YVnjUWfDDqXad0lZau53ah6jQqm52TfJE9DhDLYNjh492qJFi6iXcdnJ7/cfO3asefPmiixDBf3zn//MzMxUbVRokiIbNlKj4H6n7DEqlF6bPRkGAEAaPX5ZAADAkcgwAADSkGEAAKQhwwAASEOGAQCQhgwDACANGQYAQBoyDACANGQYAABpyDAAANKQYQAApCHDAABIQ4YBAJCGDAMAIA0ZBgBAGjIMAIA0ZBgAAGnIMAAA0pBhAACkIcMAAEhDhgEAkIYMAwAgDRkGAEAaMgwAgDRkGAAAacgwAADSkGEAAKQhwwAASEOGAQCQhgwDACANGQYAQBoyDACANGQYAABpyDAAANKQYQAApCHDAABIQ4YBAJCGDAMAIA0ZBgBAGjIMAIA0ZBgAAGnIMAAA0pBhAACkIcMAAEhDhgEAkIYMAwAgDRkGAEAaMgwAgDRkGAAAacgwAADSkGEAAKQhwwAASEOGAQCQhgwDACANGQYAQBoyDACANGQYAABpyDAAANKQYQAApCHDAABIQ4YBAJCGDAMAIA0ZBgBAGjIMAIA0ZBgAAGnIMAAA0pBhAACkIcMAAEhDhgEAkIYMAwAgDRkGAEAaMgwAgDRkGAAAacgwAADSkGEAAKQhwwAASEOGAQCQhgwDACANGQYAQBoyDACANGQYAABpyDAAANKQYQAApCHDAABIQ4YBAJCGDAMAIA0ZBgBAGjIMAIA0ZBgAAGnIMAAA0pBhAACkIcMAAEhDhgEAkIYMAwAgDRkGAEAaMgwAgDRkGAAAacgwAADSkGEAAKQhwwAASEOGAQCQhgwDACANGQYAQJr/B75uYHjxSKAyAAAAAElFTkSuQmCC\" data-image-state=\"image-loaded\" width=\"482\" height=\"650\"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 2px 8px; transform-origin: 2px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 21px; text-align: left; transform-origin: 384px 21px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 370.5px 8px; transform-origin: 370.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eDiagram showing a normalization of posed problem where (x1,y1) is placed at origin and (x2,y2) is placed on Y-axis at distance d. Final (x,y) values will require rotation and shifting.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function xy = circle_intersections(x1,y1,R,x2,y2,P)\r\n  d2=(x1-x2)^2+(y1-y2)^2;\r\n  d=d2^0.5;\r\n  xy=[];\r\n  if d\u003eP+R,return;end % No intersection due to C-C separation\r\n  % Two other No intersection Cases can be determined using d,P,R\r\n  %if ,return;end % No intersection, smaller R is inside larger P\r\n  %if ,return;end % No intersection, smaller P is inside larger R\r\n  \r\n %Single point intersections\r\n if d==P+R\r\n  xy=[0 R];\r\n elseif d-P==-R\r\n  %xy=[];\r\n elseif d+P==R\r\n  %xy=\r\n end\r\n \r\n if isempty(xy) % Dual Solutions\r\n  %y=\r\n  %x=\r\n  %xy=[ ; ];\r\n end\r\n \r\n %Rotation Angle: atan2\r\n theta=atan2(x2-x1,y2-y1); % (X,Y) output radians Neg Left of vert, Pos Right of Vert\r\n \r\n %Rotation Matrix: [cos(t) -sin(t);sin(t) cos(t)]\r\n %Translation matrix: [x1 y1]\r\n %Check of (x2,y2) being regenerated from d, theta, and translation\r\n [xy2c]=[0 d]*[cos(theta) -sin(theta);sin(theta) cos(theta)]+[x1 y1]\r\n [x2 y2]\r\n \r\n %xy=\r\n \r\n \r\n \r\nend % circle_intersections","test_suite":"%%\r\nvalid=1;\r\nx1=0;y1=0;R=6;\r\nx2=0;y2=10;P=8;\r\nxy = circle_intersections(x1,y1,R,x2,y2,P)\r\nif size(xy,1)~=2\r\n valid=0;\r\nend\r\nif sum(sum((xy-[x1 y1]).^2,2)-R^2)\u003e1e-6 % Test points\r\n valid=0;\r\nend\r\nif sum(sum((xy-[x2 y2]).^2,2)-P^2)\u003e1e-6 % Test points\r\n valid=0;\r\nend\r\nassert(valid)\r\n%%\r\nvalid=1;\r\nx1=0;y1=0;R=6;\r\nx2=10;y2=0;P=8;\r\nxy = circle_intersections(x1,y1,R,x2,y2,P)\r\nif size(xy,1)~=2\r\n valid=0;\r\nend\r\nif sum(sum((xy-[x1 y1]).^2,2)-R^2)\u003e1e-6 % Test points\r\n valid=0;\r\nend\r\nif sum(sum((xy-[x2 y2]).^2,2)-P^2)\u003e1e-6 % Test points\r\n valid=0;\r\nend\r\nassert(valid)\r\n%%\r\nvalid=1;\r\nx1=0;y1=0;R=6;\r\nx2=-10;y2=0;P=8;\r\nxy = circle_intersections(x1,y1,R,x2,y2,P)\r\nif size(xy,1)~=2\r\n valid=0;\r\nend\r\nif sum(sum((xy-[x1 y1]).^2,2)-R^2)\u003e1e-6 % Test points\r\n valid=0;\r\nend\r\nif sum(sum((xy-[x2 y2]).^2,2)-P^2)\u003e1e-6 % Test points\r\n valid=0;\r\nend\r\nassert(valid)\r\n%%\r\nvalid=1;\r\nx1=0;y1=0;R=6;\r\nx2=0;y2=-10;P=8;\r\nxy = circle_intersections(x1,y1,R,x2,y2,P)\r\nif size(xy,1)~=2\r\n valid=0;\r\nend\r\nif sum(sum((xy-[x1 y1]).^2,2)-R^2)\u003e1e-6 % Test points\r\n valid=0;\r\nend\r\nif sum(sum((xy-[x2 y2]).^2,2)-P^2)\u003e1e-6 % Test points\r\n valid=0;\r\nend\r\nassert(valid)\r\n%%\r\nvalid=1;\r\nx1=4;y1=4;R=6;\r\nx2=6;y2=-2;P=8;\r\nxy = circle_intersections(x1,y1,R,x2,y2,P)\r\nif size(xy,1)~=2\r\n valid=0;\r\nend\r\nif sum(sum((xy-[x1 y1]).^2,2)-R^2)\u003e1e-6 % Test points\r\n valid=0;\r\nend\r\nif sum(sum((xy-[x2 y2]).^2,2)-P^2)\u003e1e-6 % Test points\r\n valid=0;\r\nend\r\nassert(valid)\r\n%%\r\nvalid=1;\r\nx1=-4;y1=-4;R=4;\r\nx2=-4;y2=8;P=8;\r\nxy = circle_intersections(x1,y1,R,x2,y2,P)\r\nif size(xy,1)~=1\r\n valid=0;\r\nend\r\nif sum(sum((xy-[x1 y1]).^2,2)-R^2)\u003e1e-6 % Test points\r\n valid=0;\r\nend\r\nif sum(sum((xy-[x2 y2]).^2,2)-P^2)\u003e1e-6 % Test points\r\n valid=0;\r\nend\r\nassert(valid)\r\n%%\r\nvalid=1;\r\nx1=3;y1=1;R=4;\r\nx2=3;y2=5;P=8;\r\nxy = circle_intersections(x1,y1,R,x2,y2,P)\r\nif size(xy,1)~=1\r\n valid=0;\r\nend\r\nif sum(sum((xy-[x1 y1]).^2,2)-R^2)\u003e1e-6 % Test points\r\n valid=0;\r\nend\r\nif sum(sum((xy-[x2 y2]).^2,2)-P^2)\u003e1e-6 % Test points\r\n valid=0;\r\nend\r\nassert(valid)\r\n%%\r\nvalid=1;\r\nx1=-2;y1=1;R=10;\r\nx2=0;y2=1;P=8;\r\nxy = circle_intersections(x1,y1,R,x2,y2,P)\r\nif size(xy,1)~=1\r\n valid=0;\r\nend\r\nif sum(sum((xy-[x1 y1]).^2,2)-R^2)\u003e1e-6 % Test points\r\n valid=0;\r\nend\r\nif sum(sum((xy-[x2 y2]).^2,2)-P^2)\u003e1e-6 % Test points\r\n valid=0;\r\nend\r\nassert(valid)\r\n%%\r\nvalid=1;\r\nx1=2;y1=1;R=1;\r\nx2=8;y2=8;P=2;\r\nxy = circle_intersections(x1,y1,R,x2,y2,P)\r\nif ~isempty(xy)\r\n valid=0;\r\nend\r\nassert(valid)\r\n%%\r\nvalid=1;\r\nx1=2;y1=1;R=1;\r\nx2=2;y2=1;P=2;\r\nxy = circle_intersections(x1,y1,R,x2,y2,P)\r\nif ~isempty(xy)\r\n valid=0;\r\nend\r\nassert(valid)\r\n%%\r\nvalid=1;\r\nx1=2;y1=2;R=1;\r\nx2=3;y2=3;P=3;\r\nxy = circle_intersections(x1,y1,R,x2,y2,P)\r\nif ~isempty(xy)\r\n valid=0;\r\nend\r\nassert(valid)\r\n%%\r\nvalid=1;\r\nx1=2;y1=2;R=5;\r\nx2=3;y2=3;P=1;\r\nxy = circle_intersections(x1,y1,R,x2,y2,P)\r\nif ~isempty(xy)\r\n valid=0;\r\nend\r\nassert(valid)\r\n%%\r\nvalid=1;\r\nx1=rand;y1=4+rand;R=6+rand;\r\n[x1 y1 R]\r\nx2=-1+rand;y2=-3+rand;P=8+rand;\r\n[x2 y2 P]\r\nxy = circle_intersections(x1,y1,R,x2,y2,P)\r\nif size(xy,1)~=2\r\n valid=0;\r\nend\r\nif sum(sum((xy-[x1 y1]).^2,2)-R^2)\u003e1e-6 % Test points\r\n valid=0;\r\nend\r\nif sum(sum((xy-[x2 y2]).^2,2)-P^2)\u003e1e-6 % Test points\r\n valid=0;\r\nend\r\nassert(valid)\r\n%%\r\nvalid=1;\r\nx1=-1+rand;y1=-3+rand;R=8+rand;\r\n[x1 y1 R]\r\nx2=rand;y2=4+rand;P=6+rand;\r\n[x2 y2 P]\r\nxy = circle_intersections(x1,y1,R,x2,y2,P)\r\nif size(xy,1)~=2\r\n valid=0;\r\nend\r\nif sum(sum((xy-[x1 y1]).^2,2)-R^2)\u003e1e-6 % Test points\r\n valid=0;\r\nend\r\nif sum(sum((xy-[x2 y2]).^2,2)-P^2)\u003e1e-6 % Test points\r\n valid=0;\r\nend\r\nassert(valid)\r\n\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":1,"created_by":3097,"edited_by":3097,"edited_at":"2023-08-11T15:10:45.000Z","deleted_by":null,"deleted_at":null,"solvers_count":6,"test_suite_updated_at":"2023-08-11T15:10:45.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2023-08-10T16:45:31.000Z","updated_at":"2023-08-11T15:10:45.000Z","published_at":"2023-08-10T19:02:14.000Z","restored_at":null,"restored_by":null,"spam":null,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eDo two given circles intersect in Zero, One, or Two points and provide the intersection(s). The \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/answers/196755-fsolve-to-find-circle-intersections\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eStafford\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e method may provide some guidance and alternate solution method. I will elaborate a more geometric solution utilizing Matlab specific functions, rotation matrix, and translation matrix. Assumption is that Matlab function circcirc is not available.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGiven circles [x1,y1,R] and [x2,y2,P] return the intersections [], [x y], or [x y;x y].\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe below figure is created based upon d=distance([x1,y1],[x2,y2]), translating (x1,y1) to (0,0), and rotating (x2,y2) to be on the Y-axis. From this manipulation two right triangles are apparent: [X,Y,R] and [X,d-Y,P]. Subtracting and simplifying these triangles leads to Y and two X values after substituting back into R^2=X^+Y^2 equation.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eP^2=X^2+(d-Y)^2  and R^2=X^2+Y^2  after subtraction gives R^2-P^2=Y^2-(d-Y)^2 = Y^2-d^2+2dY-Y^2=2dY-d^2 thus\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eY=(R^2-P^2+d^2)/(2d)  and X=+/- (R^2-Y^2)^.5\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe trick is to now un-rotate and translate this solution matrix using t=atan2(dx,dy), [cos(t) -sin(t);sin(t) cos(t)] and [x1 y1]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"650\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"482\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"baseline\\\"/\u003e\u003cw:attr w:name=\\\"altText\\\" w:val=\\\"\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eDiagram showing a normalization of posed problem where (x1,y1) is placed at origin and (x2,y2) is placed on Y-axis at distance d. Final (x,y) values will require rotation and shifting.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image1.png\",\"relationshipId\":\"rId1\"}]},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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I3hL9+7dhRArVqxIasDGZme8GXJjUp8DUNGLl5whEn6l6Mg9N6n91NKdFHaT9xuAZPr+6hRqwoQJQojgr89xPPjgg0KIRx555N577xVCzJgxI86D77zzTiHEunXrjHdPnDjRsmXL//zP/wx9TGNjoxBiyJAhqY08ZCrs3o3QamJqyH+wXBI/mlh7buL7qQ07qV70PaS79wio788s1JAhQ4QQJ06cCN7S2Nh4/GTB27t06ZKZmSmEuPrqq+N/2o8//lgIMWHCBOPdsrIyIcQf//jHsIe1bNmyTZs2KQw7tMGpHMOQGDJsryROr0TuuYbE91Ord1Lt6HtIZ1Fabz6fTwiRkZERvOXVV19tfjLjdq/XO3fuXOPxTz/9dPxP26VLl86dOy9ZssTv9wshFi1a1KJFi5EjR4Y9LDMz88iRI8mO+eTLsiz5W8WIJPtQ4zRfnjE49L/g75QJbsWRe64h8f3U0p0UdiLDTvPjH/94yMmCd82cOdN4Y8qUKU1+np///Od1dXUrVqyoqal55513Ro0aZfyGHsbrTX0TMhIcoMTQisfjOZj3/TN92xxY3ubAchOvb0h8P7VhJ4UNwn8Xg15OPfVUIUR9fX3wIo5evXoFn64QauHChcuWLZs4ceKJEyf+8Ic/vPLKK2PGjInzmceMGXPvvfcuWbLkwIEDfr//5z//eeRjjh49muwLAEV9lnAgEAgG2HgjwFVbUJLH4/nyjMHBd9scWB58OxD4bvP2eJq+6jByzzUktZ9atJPCZvyWpDdjB1u/fn38h+3bt++OO+5o167d9OnTf//737dt2/b222/ft29fnA/JyckpKCh46623Vq5cedZZZ0Wmvba21ufznX/++YmPNs5c11joC3lkKn8kEbDUwbyCWA02BDfhJjfeqHtusvupFTsp7EeG9WbseNu3b4//sKKiovr6+gULFmRlZWVlZS1YsKC+vr64uNi4969//avH47n22mvDPurWW289evToihUrov6WvXbtWiFE3759Uxh2rLlC2CTYzSVes2ZNeXl5eXl5dXV1/EdWV1cbj/zggw/sGZsLRV2ITucTRt1zU9hPrdtJYRsyrLd+/fq1bt161apVcR7z6KOPbty4ccKECZdffrlxy4ABA26++eaKiopp06bF+cArr7yydevWQoibbrop8t533nnH6/WGnnuOL8EXrWRabPjiiy8KCwsLCwvHjh0b/5Fjx44tLCwcOnSocakOzGVsgfEnwaESnBBH7rmp7afm7qSQQ85VhgrQ9+r2MCUlJV6v96uvvkrnk7z99tuDBg2KvD0vLy/smYiGxsbG1q1bFxcXJ/j5U3jBLDbU4NFz0aJFsR7z8ssvG4+ZMmVK5L2hT1hCCoQQYVdEJ/yBTW/tKey5UfdTs3ZS3el7SGc2rL277rqrZcuWL774YjqfZMmSJcYL7oQqLy8/cOBA1NnYkiVLqqurU3hV+sQvvTI20OC7LpwWz5s3LycnRwhxxx13RF2arqmpueuuu4QQXbp0mTp1qs3Dc7aok+A0F6LDpLDnRu6nVuyksJvc3wIk0vdXp0iPP/54bm7ut99+m9qHf/nll8aVmcFbJk2adMstt2RnZ7dv376xsTHyQzp37jxu3LgEP3+aLxzt5i126dKlxr962LBhkfdef/31QojMzMyqqqqoH85sOAXBLS2FSfDJn6fpzT6pPTdsPzV3J3UAfQ/p7jqohdL3ZxbJeOWdkpISsz7hpZdeKoRo3br1hx9+GHnvokWL8vLyvvnmm0Q+lVl/v8G1MTZaK4R4/fXXQ28PFvqZZ56J9bFkOFmRAU6twYHEtvx09lwTd1Jn0PeQzh86dIjq6uqqqqo+ffqY8tl8Pt+WLVu6desW9Yn/W7ZsycrKivwLiVGZ++eEw9al3bD11tTUXHDBBTU1Nbm5uVVVVaeddpoQora29vzzz6+pqenfv/9f//rXWB/reeT7twMlNgxWY8FNK/GrsRL4nN+9EWc7TXnPNXEndQZ9D+lkGBYyt8H/+pyuK/Grr75aVFQkhBg3btxLL70khLjxxhtLS0uzs7O3bt2al5cX6wPJcCJCtygTG/yvT/7dGy7YTiXT95DOJVrQjLGME3zXDZduDR8+fNiwYUKI+fPnb9q0ac2aNaWlpUKIuXPnxmkwEhE6CTa9wUAieDFLWMXSeUAg5PUvhQteAvOFF15Yu3ZtTU3NLbfccuzYMSFEUVHRiBEjZI9LY5ZOgoOSeoVLuBOzYegqbFosHD0zzsnJeeGFF4QQW7Zs2bFjR5s2bZ5//nnZg9JV2HZi2yTYodsm0kWGYQnbTom5J8bXX3+9sTQthFi4cKHxlGIkJTLANjSYSTDiI8Mwn/2XpbgkxldddZXxRr9+/aQORD+R24OlL80RJvE/+QAX4twwnMMosavOGaNJkb+NBQKBsL/TYO+IgJOQYZhM+jM0iDFEjD/PZQRYSoO5VguxkGE4EzF2rVgBFkIwCYaCyDDMJH0qHCZWjAU9dqKo68/Bt6U3mAkxoiLDcL7IGAsmx86SeIAF82AohgzDNKpNhcPEibGgx9qKH2ChwCQ4FBNiRCLDcJfgMZrJsdbinAAOpVSDgah43jDMofhUOFLwr4yF3uj5F1mjim/8+PHGmDMzM2WPRY5YP6DIH6WsK6KbxHOIEYbZMNyOxWr1xfrFKNZPR80AA1GRYZhAu6lwJBarFZRsfQ3qN5gzxAhFhoGTMDmWLrX6Cq6Ihp7IMBBF/Mlx2GNglpQDLHSYBIcKTogBMox0OWBFOo5YPRYk2SRxLohL/LuqV4NDsS4NMgwkJE6PBUlORpMXoif1DWQhGrojw0iLs6fCUYVGIn6S6XFQIs8BS+Hbpe8kWHChFv6FDAOpi59kl0+RzZ31RtK6wUAQGYYJ3JeYKBJftQ57vGNYNOWN5JiFaC7UgiDDSAdHkKiaXLWOc5cubU7qhcbM/Uc5chLMurSbkWHAQpEvlhn/8QpOmlN7aU+Lhu3IBsPlyDBS5MKLs9IXGacUwpzsl0jns5nyRU3hmIXoMKxLgwwDMqUQ5vhO+vCpCS2PJ0XK7NwNk2DWpV2LDCMtHDhMJ2U6m8JIbOOGBsPNyDBSwTKaLEml0fNIih+oCKcuRIfhCcQuR4YBqIhJMFzCK3sAABCOBsM9mA0jaVwjDeu4ZCE6DOvSbkaGAaiCSTBciEVpAEpweYOZBLsWs2GkiKMGzOLOhehYWJd2GzKM5PBUJZjL5ZNggEVpANLQYIDZMFLBohnSxEJ0JF5f2p3IMJLAMQKmYBIcH6eHXYVFaQC2osFAKGbDAGzCQjQQiQwjaSyXIQVMghPB6WEXYlEaieLogJTR4GSxu7kHs2EAFkp/IXrlypU+ny/qXV6vNzMz89JLL83JyUlxfIBsZBiAVUyZBI8ZM6a2tjb+Yzp16vTEE08MGjQotS8BSESGkRxODCNB5i5Et27dulOnTmE3VldX79ixo6GhYevWrYMHD160aNGNN96Y5heSjtPDbkOGAZjMiiui+/Xrt2TJksjb/X7/ggUL7rjjjmPHjt12220FBQWtWrVK/8upgGcPuwSXaCEh/HqOBIVNgq2+IMvr9Y4fP/7JJ58UQtTX169cudLSLweYjgwDMI2sK6Jvuukm443Vq1fb9kUBU7AoDcAEcl+a49tvvzXeaN68uZ1fF0gfGUYSOFOFqKQ/LXj+/PnGG/3797f/q5uOq7RchQwDSIvcBvt8vmeffbakpEQI0a5du4KCgiY/BFAKGUbT+MUcUdm5EP3ee+9de+21obf4/f7t27fv37/f7/cLIXJzc8vLy71eR13vwsXSbkCGAaTC5knwwYMHDx48GPWu3Nzc0aNHP/DAA7m5uVYPAzAdGQaQNPsXort37z5x4kTj7YaGhlWrVr322mt+v3/IkCELFiw47bTTbBgDYAUyDCAJsq6I/slPfjJmzJjgu2PHjp00adLAgQPLy8s//vjjioqKNm3a2DMSwFyOOo8CS3GOCja/NEd8vXr1KisrE0Ls27fvyiuvrK+vlzgYIGVkGEBCpD8rKdKgQYMmTZokhNi6davxhmPwW697kGEATTiYV6Bggw3Tp09v166dEOLll1/mJbSgIzKMJvBsJZdTaiE6UsuWLefNm2e8PX78+GPHjskdj+nYAR2PDAOISdlJcKgrr7yyuLhYCLFnzx7jdTwAjZBhAFGovBAd6dlnn83JyRFCzJgxo7KyUvZwgCSQYQDhFF+IjpSTkzNr1iwhhN/vHz16tOzhAEngecMATqLaJPibb75J5GE33njjjTfeaPVgANORYQDfkfvHCgF3IsMAhFBvEgy4BOeGkRBeTMDZaLCC2Olcgtkw4GosRANykWHAvZgEA9KxKA24FA0GVMBsGPHwQnqOxEI0oA4yDLgLk2BAKSxKAy5Cg3XEopSzOXY2vH///h07dpx55pn5+fmyxwLIx0I0oCZnzoaXL18+YsSIVatW3XbbbbNnz5Y9HEAhWrxGNOAeDpwNNzY2Tp06denSpeeee25tbW3//v0LCgrOOuss2eMC5CPAgGocmOH33nsvOzv73HPPFULk5OT06dNnw4YNkRneuXOnh1MuCeNbpaWpJ70O0xlf/pkfpKb4uTmYAzNcV1d33nnnBd895ZRTqqqqIh/WoUOHqLcjVHDn53X1NBU8JdzmwHJ+htphB0ycvpcBOfDccGNjY+g0t1mzZgE2YbhVcBU67BItAIpwYIYzMzP9fn/w3cbGxmbNmkkcDyDXGV/+2XiDEgMKcmCGf/SjH23dujX4bl1d3SWXXCJxPIB0zIkBZTkww5dddpkQYu3atUKIXbt2bdiwoWfPnrIHBUhGiQE1OfASLa/X+9RTT91zzz3t27ffunXr9OnTc3NzZQ8KkK/NgeVGgw/mFfDMJY1wcYuzeVx7+VJ+fj5XSifCuNzNrZuJE3g8J+3moddOSxoREsXelzh9D+kOXJQGEAer04BSyDDgOpQYUAcZBtyIEgOKIMOAS1FiQAVkGAnhJW0diRID0pFhwNUoMSAXGQbcjhKriSUolyDDACgxIA0ZBiAEJQYkIcMAvkOJAfuRYQDfo8SAzcgwmsDr2boNJVYKO6DjkWEA4SgxYBsyDCAKSiwXz1ZyDzKMRHFccBtKDNiADAOIiRIDViPDAOKhxIClyDCAJlBiwDpkGE3jKROgxFKw67kBGQaQEEoMWIEMIwlcLO1ylNge7GiuQoYBJIESA+YiwwCSQ4kBE5FhJIRLRRCKEtuAnc4lyDCSw1krGCixRdjF3IYMA0gRJQbSR4YBpI4SA2kiwwDSQomBdJBhJIoLRhALJTYdu5t7kGEkjUtIEIkSm4Kdy4XIMABzUGIgBWQYgGkoMZAsMowkcL4KTaLE6WNHcxUyjFRwBgtxUOLUsFu5ExkGYD5KDCSIDCM5LJchQZQYSAQZRopYQEOTKHHigjsUv+m6DRkGYCFKDMRHhpE0fltHUigxEAcZRupYl0aCKHF8rEi7GRkGYAdKDERFhgHYhBLHx1TYncgwUhE8XrAujaRQ4kjsRC5HhgHYihIDocgwALtR4kisSLsWGUaKWJdGOiixgd0HZBiAHJQYEGQY6WAZDWmixAZ2JTcjwzABC2tImZtLzI4DQYYBSOfmEgNkGGnhQi2YwoUl5gUsYSDDAJTgwhIDggwjfUyIYRb3lJipMILIMACFuKfEgIEMwwRMiGEix5eYqTBCkWEAynF8iYEgMgxARY4vMVNhGMgwzMG6NEznyBKzgyAMGQagLkeWGAiVIXsAcI5A4Lvf9D0eFtwQ3cqVK30+X9S7vF5vZmbmpZdempOTE3p7mwPLjQYfzCsIVllTXJyFSGQYgH3GjBlTW1sb/zGdOnV64oknBg0aFLzFSSUGwngCbv2tLD8/v6qqSvYoHIjf91Xj8Si0m59++um1tbWtW7fu1KlT2F3V1dU7duxoaGgw3l20aNGNN94Y+oDgurSmJWbXsJS+h3SF9k+b6fszUxzHGtUomOGioqIlS5ZE3uv3+xcsWHDHHXccO3YsKyvrwIEDrVq1Cn2A1iVm17CUvod0LtGCybhkGinzer3jx49/8sknhRD19fUrV64Me4C+V2zRYMRChmE+Sox03HTTTcYbq1evjrxXxxKzIyAOMgxALd9++63xRvPmzaM+QMcSG5gKIxIZhiWYECNl8+fPN97o379/rMdoVGKWoxEfGQagCp/PN3PmzJKSEiFEu3btCgriJVajEgNx8LxhWIVX80As77333rXXXht6i9/v3759+/79+/1+vxAiNze3vLzc621inqD+84mZCqNJZBiA3Q4ePHjw4MGod+Xm5o4ePfqBBx7Izc1N5FOpX2IgPjIMCzEhRlTdu3efOHGi8XZDQ8OqVatee+01v98/ZMiQBQsWnHbaaUl9NmVLzFQYiVDoef020/e53noJvUTLrduaZFq8fMf69esHDhxYX1/frl27ioqKNm3aJPuZVXtlDxpsM30P6VyiBWtxDEIievXqVVZWJoTYt2/flVdeWV9fn+xn4IotaIoMw3I8eQmJGDRo0KRJk4QQW7duNd5IljolZiqMxJFh2IoSI47p06e3a9dOCPHyyy9HfQmtJqlTYiBBZBh2YE6ARLRs2XLevHnG2+PHjz927FgKn0R6iZkKIylkGDZhaRqJuPLKK4uLi4UQe/bsMV7HIwUSS0yDkSwyDAkoMeJ49tlnc3JyhBAzZsyorKxM7ZNIKTEbNlJAhmEf5gdIRE5OzqxZs4QQfr9/9OjRKX8eiXNiNnUkTqEnFNpM3yeZ6Y5VO5sp9bxh+9n2fGI2bLn0PaQzG4bdOEkMO9kzJ6bBSBkZhkyUGDawusRsxkgHGYYEzBhgM3vmxGzYSAEZhhwsTcNmFpWY5WikiQxDPkoMe5heYjZdpI8MQ5rQ2QOHM9jDxBLz18NgCjIMmTh4wX6mz4nZjJEOMgzJOEkM+6VfYk4JwyxkGPJRYtgvnRKzocJEZBhKoMSwX2ol5pQwzEWGoRxKDNskW2IaDNORYaiCC6chReIlpsGwAhmGQigxpEikxDQYFiHDUAsHOEgRv8Q0GNYhw1AOl2tBikTmxDQYpiPDUBElhhRRS8xThGEpMgxFUWJIEVZiGgyrkWGoixJDisg5MQ2GdcgwlEaJIUWwxIIGw2IZsgcANCEQ+K7Bxv9yTIQNPB4hxPImHwakj9kwNMDziWEbj+ek88H82gerkWHogRLDBjw/GPYjw9AGJYalaDCkIMPQCSWGRWgwZCHD0AwlhuloMCQiw9APJYaJaDDkIsPQEiWGKWgwpCPD0BUlRppoMFRAhqGxsBITYyQobGuhwZCIDENvYS+wQInRpLCNhAZDLjIMJ6DESFDYJJgGQzoyDIdggRrxsRANNZFhOAcL1IiFSTCU5cy/sFRbW7tnz57gux06dGjVqpXE8cBOwb/IJITweDjggkkwlObMDL/55ptPP/108+bNjXdnz57du3dvuUOCncJKLDj4uhVXY0F9zszwp59+Onny5FGjRskeCKQJLbFgWuxKTIKhBWeeG96+ffs555xTW1t74sQJ2WOBNJGnijlb7BJcjQWNeAKO20IbGxs7dep09tlnHzp0qK6ubujQodOmTYt8WH5+ftgtVVVVtgwQdnP5yqTH48DdPA6X/7jdwzHHcAcuSn/11VdXXHHF/fffn5eXV11dfcMNN5SVlRUXF0dglxN+AAAK5klEQVQ+UtOfGZJlHIg5W+x4BNhVwg7gkVXWhUMWpR977LGuXbt27dq1d+/eeXl5zzzzTF5enhCidevWV1xxxebNm2UPEPKxRu1gkT9NGgxdOGQ2PHLkyP79+wshmjVrtnfv3k2bNg0bNsy4y+fzeb0O+W0D6ePSLechwNCaQzJ8zjnnnHPOOcbbVVVVJSUlF1100bnnnltdXb169erf/e53cocHpbBG7RgEGA7gkAyHys/Pnzx5clFR0YUXXvjJJ59MmjSJJw0jUuS0WHAc10fkCQV+dtCUuy6hDJWfn88lWhAuOKA770ppJsGIpO8h3YGzYSApYWvUgpmxwggwnIcMA0IQY+U5ftECrkWGge8RY9VEfVIZPw44CRkGwhFjFRBguAQZBqIjxrKw/gxXIcNAPMTYTgQYLkSGgabFirGgE2Zg/RluRoaBREXGWDA5Tg8BBsgwkJxgJJgcpyzWH9XguwcXIsNAiuJMjgVFiYb6ApHIMJCWqJNjQY9DUF8gDjIMmCPq5DjsFveEJ87fcnbPNwFIBBkGzBRrchx5o/NqFCe9won/XsAUZBiwRGh14idZ6z7FT69B638gYDUyDFgufpK1e82KJtOr+PgBpZBhwFbxV61j3SUlbInMdINIL5AaMgzIEdat+M2zbgKaVGvN+qIAgsgwoITIpCUVyDQrngiiC1iBDAOKSjPM5n5pABYhw4A2Eq9jWLDJKqAsMgw4UJNPlwKgCK/sAQAA4F5kGAAAacgwAADSkGEAAKQhwwAASEOGAQCQhgwDACANGQYAQBoyDACANGQYAABpyDAAANKQYQAApCHDAABIQ4YBAJCGDAMAIA0ZBgBAGjKskPz8fNlDiIJRJU7NUSlIzW8Uo0qcmqPSFBkGAEAaMgwAgDRkGAAAacgwAADSkGEAAKTxBAIB2WOQgyv9AMBJqqqqZA8hFe7NMAAA0rEoDQCANGQYAABpyDAAANKQYQAApCHDAABIQ4YBAJCGDAMAIA0ZBgBAmmZTp06VPQa7rVu3rl27dqG37N+//4MPPmhoaDj99NNljcqwZ8+eTZs2HT9+PDc3V+5IQtXW1lZUVHz99dc//vGPZY/lJFu2bGnWrNkpp5wieyDf2bVr10cfffT3v/+9TZs2sscihEobdijVvkuhlNqi1NzvFDxGhR3S1dzs43BdhufMmTN79uyxY8cGb1m+fPndd9/t8/n+8Ic/1NXV9ejRQ9bYFixYMGXKFJ/Pt2jRoh07dlx++eWyRhJq7dq1Y8eOPX78+MqVK996663CwkKPxyN7UEIIsWvXrqKioi5dupxzzjmyxyKEEI899tizzz77z3/+8/XXX//zn/88aNCgjIwMieNRZ8MOpdp3KZRSW5Sa+52Cx6iwQ7qam30TAq5x6NCh+++//+KLL+7Vq1fwxoaGhosvvnjnzp2BQOCbb7656KKLdu/eLWV4jY2NHTt2NEby97//vWPHjp9++qmUkYRqaGjo0aPH3/72N+Pda665ZuXKlXKHZPD5fIMHD+7Xr9+qVatkjyUQCAQ+/fTTCy644NChQ8a7gwYNeu211ySOR50NO5Rq36VQSm1Rau53qh2jIg/pam72TXLRueFZs2bl5OQ8/vjjoTe+99572dnZ5557rhAiJyenT58+GzZskDRA4ff7W7RoIYT4wQ9+4PF4fD6frJEErVmzJi8vr3v37sa7b7/99sCBA+UOyTBz5swBAwYYPzgVZGdnz5s377TTTjPePeuss7788kuJ41Fqww5S7bsUSqktStn9TqljVOQhXc3NvkkuynBJScl9993XsmXL0Bvr6urOO++84LunnHKKrL/R4fV6p06dOnHixNmzZ48aNcpYHJMyklB1dXVt27adMmVK586du3bt+tJLL8kekRBCbNy48YMPPrjzzjtlD+R7Z5xxxk9/+lPj7b17965evXrAgAESx6POhh1Kte9SkGpblJr7nWrHqMhDupqbfZNclGGvN8o/trGxMfSMS7NmzQLy/uTUpk2bfvCDH5x++unZ2dn/93//d/ToUVkjCdq1a9eqVas6depUWVlZVlb24osvrlu3Tu6Q/vGPf5SUlMycOVPuMGKprq6++eabJ06c2LFjR4nDUGrDjqTId8mg4Bal4H5nUOoYFXlIV3yzj8XJGX7ssce6du3atWvX3r17x3pMZmam3+8PvtvY2NisWTNbRifEySN89913P/roo7KyslGjRs2bN08IMX/+fNtGEmtU7dq1O/PMM4uKioQQ+fn5AwYMWLlypdwhPfnkk+eff/7nn3++du3aQ4cObdu2TdYvvJEbWGVl5ZAhQ0aPHj1x4kQpQwqSu2HHp853yaDOFhWkyH4XRp1jVCwqb/ZxqHKNohVGjhzZv39/IUScn8SPfvSjrVu3Bt+tq6uz8xxM6Ai/+OKL/Pz84FDbtWu3f/9+20YSa1R1dXWhd8napkOH9Le//e3rr78uLS0VQhw4cGDt2rWnnnpqfn6+3FEJId5///277rpr2rRpV111lf2DCSN3w45Dqe+SITc3V5EtKujf//3fQ99VpCV1dXWKHKNiUXazb4LkS8Rst2bNmtArpRsbG3v16rVmzZpAILBz584LL7zw66+/ljKwTz/99MILL/zss88CgcDf//73a665ZtmyZVJGEsrn83Xv3n316tWBQOCbb77p3bt3RUWF7EF975ZbblHhutZAIPD5559ffPHFq1ev9v1LQ0ODxPGos2GHUu27FEmRLUrN/U7NY1ToIV3Nzb5JTp4NJ8Lr9T711FP33HNP+/btt27dOn36dFnPSe/YseNDDz00fPjwTp06bd26ddiwYUOHDpUyklD/9m//9txzz913330vvvjirl27xo0bp8fz8GxXWlr67bffTpgwIXjLqFGjHn74YVnjUWfDDqXad0lZau53ah6jQqm52TfJE9DhDLYNjh492qJFi6iXcdnJ7/cfO3asefPmiixDBf3zn//MzMxUbVRokiIbNlKj4H6n7DEqlF6bPRkGAEAaPX5ZAADAkcgwAADSkGEAAKQhwwAASEOGAQCQhgwDACANGQYAQBoyDACANGQYAABpyDAAANKQYQAApCHDAABIQ4YBAJCGDAMAIA0ZBgBAGjIMAIA0ZBgAAGnIMAAA0pBhAACkIcMAAEhDhgEAkIYMAwAgDRkGAEAaMgwAgDRkGAAAacgwAADSkGEAAKQhwwAASEOGAQCQhgwDACANGQYAQBoyDACANGQYAABpyDAAANKQYQAApCHDAABIQ4YBAJCGDAMAIA0ZBgBAGjIMAIA0ZBgAAGnIMAAA0pBhAACkIcMAAEhDhgEAkIYMAwAgDRkGAEAaMgwAgDRkGAAAacgwAADSkGEAAKQhwwAASEOGAQCQhgwDACANGQYAQBoyDACANGQYAABpyDAAANKQYQAApCHDAABIQ4YBAJCGDAMAIA0ZBgBAGjIMAIA0ZBgAAGnIMAAA0pBhAACkIcMAAEhDhgEAkIYMAwAgDRkGAEAaMgwAgDRkGAAAacgwAADSkGEAAKQhwwAASEOGAQCQhgwDACANGQYAQBoyDACANGQYAABpyDAAANKQYQAApCHDAABIQ4YBAJCGDAMAIA0ZBgBAGjIMAIA0ZBgAAGnIMAAA0pBhAACkIcMAAEhDhgEAkIYMAwAgDRkGAEAaMgwAgDRkGAAAacgwAADSkGEAAKQhwwAASEOGAQCQhgwDACANGQYAQJr/B75uYHjxSKAyAAAAAElFTkSuQmCC\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":60925,"title":"Intersect three sequences","description":"Most numbers have interesting properties, if you look hard enough and interpret “interesting” liberally. Let’s choose a number at random—300, say—and list some of its properties:\r\nIt is divisible by the square of its largest prime factor. \r\nIt is the area of a triangle with integer sides and integer area\r\nIt is a folding point of the non-negative integers written in a hexagonal spiral (see below), as are 1, 2, 3, 4, 5, 7, 8, 10, 12, 14, 16, 19, 21, 24, etc. \r\nA number that shares these properties is 108: (a) It is divisible by 9, or the square of its largest prime factor (3), (b) it is the area of a triangle with sides 15, 15, and 18, and (c) it is a folding point of the hexagon (it would be to the right of 75 in the hexagon below). \r\nWrite a function to determine whether a number has the three properties listed above. \r\n","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.4333px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 677.233px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 408px 338.617px; transform-origin: 408px 338.617px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 385px 21px; text-align: left; transform-origin: 385px 21px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 361.508px 8px; transform-origin: 361.508px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eMost numbers have interesting properties, if you look hard enough and interpret “interesting” liberally. Let’s choose a number at random—300, say—and list some of its properties:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003col style=\"block-size: 81.7333px; counter-reset: list-item 0; font-family: Helvetica, Arial, sans-serif; list-style-type: decimal; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; perspective-origin: 392px 40.8667px; transform-origin: 392px 40.8667px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"block-size: 20.4333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 364px 10.2167px; text-align: left; transform-origin: 364px 10.2167px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 164.125px 8px; transform-origin: 164.125px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eIt is divisible by the square of its largest prime factor. \u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.4333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 364px 10.2167px; text-align: left; transform-origin: 364px 10.2167px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 185.933px 8px; transform-origin: 185.933px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eIt is the area of a triangle with integer sides and integer area\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 40.8667px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 364px 20.4333px; text-align: left; transform-origin: 364px 20.4333px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 363.283px 8px; transform-origin: 363.283px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eIt is a folding point of the non-negative integers written in a hexagonal spiral (see below), as are 1, 2, 3, 4, 5, 7, 8, 10, 12, 14, 16, 19, 21, 24, etc. \u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ol\u003e\u003cdiv style=\"block-size: 63px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 385px 31.5px; text-align: left; transform-origin: 385px 31.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 379.592px 8px; transform-origin: 379.592px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eA number that shares these properties is 108: (a) It is divisible by 9, or the square of its largest prime factor (3), (b) it is the area of a triangle with sides 15, 15, and 18, and (c) it is a folding point of the hexagon (it would be to the right of 75 in the hexagon below). \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 385px 10.5px; text-align: left; transform-origin: 385px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 266.708px 8px; transform-origin: 266.708px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWrite a function to determine whether a number has the three properties listed above. \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 421.5px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 385px 210.75px; text-align: left; transform-origin: 385px 210.75px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" width=\"487\" height=\"416\" style=\"vertical-align: baseline;width: 487px;height: 416px\" src=\"data:image/png;base64,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\" data-image-state=\"image-loaded\"\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function tf = isX3Seq(x)\r\n  tf = false;\r\nend","test_suite":"%%\r\nassert(isX3Seq(108))\r\n\r\n%%\r\nassert(~isX3Seq(144))\r\n\r\n%%\r\nassert(~isX3Seq(200))\r\n\r\n%%\r\nassert(~isX3Seq(256))\r\n\r\n%%\r\nassert(isX3Seq(300))\r\n\r\n%%\r\nassert(isX3Seq(432))\r\n\r\n%%\r\nassert(~isX3Seq(500))\r\n\r\n%%\r\nassert(~isX3Seq(648))\r\n\r\n%%\r\nassert(~isX3Seq(660))\r\n\r\n%%\r\nassert(~isX3Seq(768))\r\n\r\n%%\r\nassert(isX3Seq(1200))\r\n\r\n%%\r\nassert(~isX3Seq(1553))\r\n\r\n%%\r\nassert(isX3Seq(1728))\r\n\r\n%%\r\nassert(~isX3Seq(1875))\r\n\r\n%%\r\nassert(~isX3Seq(3072))\r\n\r\n%%\r\nassert(~isX3Seq(3924))\r\n\r\n%%\r\nassert(isX3Seq(4332))\r\n\r\n%%\r\nassert(~isX3Seq(6084))\r\n\r\n%%\r\nassert(~isX3Seq(8118))\r\n\r\n%%\r\nassert(~isX3Seq(10806))\r\n\r\n%%\r\nassert(~isX3Seq(14283))\r\n\r\n%%\r\nassert(isX3Seq(18252))\r\n\r\n%%\r\nassert(~isX3Seq(26010))\r\n\r\n%%\r\nassert(~isX3Seq(31236))\r\n\r\n%%\r\nassert(~isX3Seq(42336))\r\n\r\n%%\r\nassert(~isX3Seq(49152))\r\n\r\n%%\r\nassert(isX3Seq(65712))\r\n\r\n%%\r\nassert(isX3Seq(99372))\r\n\r\n%%\r\nassert(~isX3Seq(116592))\r\n\r\n%%\r\nassert(~isX3Seq(140000))\r\n\r\n%%\r\nassert(~isX3Seq(152172))\r\n\r\n%%\r\nassert(~isX3Seq(160314))\r\n\r\n%%\r\nassert(~isX3Seq(170008))\r\n\r\n%%\r\nassert(isX3Seq(212268))\r\n\r\n%%\r\nassert(isX3Seq(248832))\r\n\r\n%%\r\nassert(isX3Seq(280908))\r\n\r\n%%\r\nassert(~isX3Seq(296274))\r\n\r\n%%\r\nassert(isX3Seq(303372))\r\n\r\n%%\r\nassert(isX3Seq(314928))\r\n\r\n%%\r\nassert(~isX3Seq(340707))\r\n\r\n%%\r\nassert(isX3Seq(489648))\r\n\r\n%%\r\nassert(~isX3Seq(3145728))\r\n\r\n%%\r\nassert(isX3Seq(7114800))\r\n\r\n%%\r\nassert(~isX3Seq(12582912))\r\n\r\n%%\r\nassert(isX3Seq(14865228))","published":true,"deleted":false,"likes_count":0,"comments_count":3,"created_by":46909,"edited_by":46909,"edited_at":"2025-06-02T16:45:27.000Z","deleted_by":null,"deleted_at":null,"solvers_count":2,"test_suite_updated_at":"2025-06-02T03:01:11.000Z","rescore_all_solutions":true,"group_id":1,"created_at":"2025-05-27T13:26:30.000Z","updated_at":"2025-06-06T14:09:48.000Z","published_at":"2025-05-27T13:26:30.000Z","restored_at":null,"restored_by":null,"spam":null,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eMost numbers have interesting properties, if you look hard enough and interpret “interesting” liberally. Let’s choose a number at random—300, say—and list some of its properties:\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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIt is divisible by the square of its largest prime factor. \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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIt is the area of a triangle with integer sides and integer area\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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIt is a folding point of the non-negative integers written in a hexagonal spiral (see below), as are 1, 2, 3, 4, 5, 7, 8, 10, 12, 14, 16, 19, 21, 24, etc. \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eA number that shares these properties is 108: (a) It is divisible by 9, or the square of its largest prime factor (3), (b) it is the area of a triangle with sides 15, 15, and 18, and (c) it is a folding point of the hexagon (it would be to the right of 75 in the hexagon below). \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWrite a function to determine whether a number has the three properties listed above. \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"416\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"487\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"baseline\\\"/\u003e\u003cw:attr w:name=\\\"altText\\\" w:val=\\\"\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image1.png\",\"relationshipId\":\"rId1\"}]},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":2218,"title":"Wayfinding 1 - crossing","description":"This is the first part of a series of assignments about wayfinding. The final goal is to be able to calculate the fastest route through a terrain of areas with different properties. The assignments will build on top of each other, gradually increasing the complexity, but guiding you stepwise towards the final goal. You can re-use code from preceding assignments to save some work.\r\n\r\n*How many times does AB cross another line?*\r\n\r\n\u003c\u003chttp://i60.tinypic.com/mk7us1.png\u003e\u003e\r\n\r\nThe first assignment deals with the problem of finding the lines we cross while going from A to B. The answer will be the number of times the segment AB intersects with the other lines. The other lines are isolated (or intersecting) line segments of two nodes each.  \r\n\r\nThe inputs of the function |WayfindingIntersections(AB,L)| are a matrix |AB| of two columns, each with x-y coordinates, of our straight path from A (1st column) to B (2nd column), and a 3-dimensional matrix |L| of columns with x- and y-coordinates, each column either the start or the end of a line, and with all individual lines concatenated in the 3rd dimension.\r\n\r\n AB = [\r\n   xA xB\r\n   yA yB\r\n ]\r\n\r\n L = cat(3,...\r\n  [ x1_start x1_end\r\n    y1_start y1_end ] ...\r\n   ,...\r\n  [ x2_start x2_end\r\n    y2_start y2_end ] ...\r\n   ,...\r\n  [ x3_start x3_end\r\n    y3_start y3_end ] ... % etc.\r\n  )  \r\n\r\nYour output n will be the number of times the line AB intersects with any of the other lines. The lines will not 'just touch' AB with their begin or end. \r\n\r\np.s. I noticed later on that there is another Cody problem \u003chttp://www.mathworks.nl/matlabcentral/cody/problems/1720-do-the-lines-intersect 1720\u003e that is somewhat similar. But this was a logical start for the series.","description_html":"\u003cp\u003eThis is the first part of a series of assignments about wayfinding. The final goal is to be able to calculate the fastest route through a terrain of areas with different properties. The assignments will build on top of each other, gradually increasing the complexity, but guiding you stepwise towards the final goal. You can re-use code from preceding assignments to save some work.\u003c/p\u003e\u003cp\u003e\u003cb\u003eHow many times does AB cross another line?\u003c/b\u003e\u003c/p\u003e\u003cimg src = \"http://i60.tinypic.com/mk7us1.png\"\u003e\u003cp\u003eThe first assignment deals with the problem of finding the lines we cross while going from A to B. The answer will be the number of times the segment AB intersects with the other lines. The other lines are isolated (or intersecting) line segments of two nodes each.\u003c/p\u003e\u003cp\u003eThe inputs of the function \u003ctt\u003eWayfindingIntersections(AB,L)\u003c/tt\u003e are a matrix \u003ctt\u003eAB\u003c/tt\u003e of two columns, each with x-y coordinates, of our straight path from A (1st column) to B (2nd column), and a 3-dimensional matrix \u003ctt\u003eL\u003c/tt\u003e of columns with x- and y-coordinates, each column either the start or the end of a line, and with all individual lines concatenated in the 3rd dimension.\u003c/p\u003e\u003cpre\u003e AB = [\r\n   xA xB\r\n   yA yB\r\n ]\u003c/pre\u003e\u003cpre\u003e L = cat(3,...\r\n  [ x1_start x1_end\r\n    y1_start y1_end ] ...\r\n   ,...\r\n  [ x2_start x2_end\r\n    y2_start y2_end ] ...\r\n   ,...\r\n  [ x3_start x3_end\r\n    y3_start y3_end ] ... % etc.\r\n  )  \u003c/pre\u003e\u003cp\u003eYour output n will be the number of times the line AB intersects with any of the other lines. The lines will not 'just touch' AB with their begin or end.\u003c/p\u003e\u003cp\u003ep.s. I noticed later on that there is another Cody problem \u003ca href = \"http://www.mathworks.nl/matlabcentral/cody/problems/1720-do-the-lines-intersect\"\u003e1720\u003c/a\u003e that is somewhat similar. But this was a logical start for the series.\u003c/p\u003e","function_template":"function n = WayfindingIntersections(AB,L)\r\n  n = randi(size(L,3)+1)-1;\r\nend","test_suite":"%%\r\nAB = [2 0;0 5];\r\nL = cat(3,...\r\n    [1 0;2 2],...\r\n    [-1 4;3 3],...\r\n    [-3 2;0 2],...\r\n    [2 3;4 2]...\r\n    );\r\nn = WayfindingIntersections(AB,L)\r\nn_correct = 2;\r\nassert(isequal(n,n_correct));\r\n\r\n%\r\nAB = [ 6 -3 ; 5 2 ];\r\nL = cat(3,...\r\n[ 2 2 ; 2 -9 ],...\r\n[ -2 3 ; 8 8 ],...\r\n[ 7 -1 ; 4 6 ],...\r\n[ 7 -3 ; -6 1 ],...\r\n[ -6 -6 ; -1 2 ],...\r\n[ 5 -8 ; 3 4 ],...\r\n[ 3 5 ; -8 -9 ],...\r\n[ 8 -8 ; 4 -3 ],...\r\n[ -7 9 ; -5 9 ],...\r\n[ 6 3 ; 8 3 ],...\r\n[ 0 4 ; 9 -2 ],...\r\n[ -8 0 ; 4 0 ],...\r\n[ 6 8 ; 6 0 ],...\r\n[ -6 2 ; -6 9 ],...\r\n[ 8 -4 ; 1 -5 ],...\r\n[ 5 -1 ; -5 -3 ],...\r\n[ -2 -9 ; 6 -5 ],...\r\n[ 8 6 ; 6 -7 ],...\r\n[ -4 2 ; 5 2 ],...\r\n[ 8 6 ; 0 6 ]...\r\n);\r\nn = WayfindingIntersections(AB,L)\r\nn_correct = 7;\r\nassert(isequal(n,n_correct));\r\n\r\n%\r\nAB = [ -3 -1 ; -3 7 ];\r\nL = cat(3,...\r\n[ 9 8 ; 1 6 ],...\r\n[ -4 -6 ; -3 9 ],...\r\n[ -2 8 ; 7 5 ],...\r\n[ -3 5 ; -8 2 ],...\r\n[ 1 2 ; 3 5 ],...\r\n[ 4 -5 ; -3 -5 ],...\r\n[ 8 5 ; -1 -2 ],...\r\n[ 4 8 ; 3 5 ],...\r\n[ -3 -4 ; 7 8 ],...\r\n[ 9 7 ; -1 -3 ]...\r\n);\r\nn = WayfindingIntersections(AB,L)\r\nn_correct = 1;\r\nassert(isequal(n,n_correct));\r\n\r\n%\r\nAB = [ 5 9 ; -9 0 ];\r\nL = cat(3,...\r\n[ 3 -1 ; 1 -2 ],...\r\n[ -5 3 ; -3 4 ],...\r\n[ -9 -2 ; -3 -7 ],...\r\n[ -6 -5 ; -1 -3 ],...\r\n[ 4 -3 ; 5 -9 ],...\r\n[ -6 -2 ; -4 -4 ],...\r\n[ -1 -7 ; -3 -4 ],...\r\n[ 0 9 ; 6 3 ],...\r\n[ -6 1 ; -7 -8 ],...\r\n[ 6 5 ; 6 5 ],...\r\n[ 5 6 ; -5 -1 ],...\r\n[ 7 9 ; -7 -7 ],...\r\n[ -9 -4 ; -2 -3 ],...\r\n[ 3 5 ; -2 5 ],...\r\n[ -3 -4 ; 5 -6 ]...\r\n);\r\nn = WayfindingIntersections(AB,L)\r\nn_correct = 0;\r\nassert(isequal(n,n_correct));\r\n\r\n%\r\nAB = [ 6 -3 ; 6 -7 ];\r\nL = cat(3,...\r\n[ -7 0 ; -3 0 ],...\r\n[ -1 5 ; -8 0 ],...\r\n[ 8 -5 ; 1 4 ],...\r\n[ -4 -4 ; 7 3 ],...\r\n[ 0 0 ; 4 -5 ],...\r\n[ -2 -3 ; -4 4 ],...\r\n[ 4 -8 ; 2 -5 ],...\r\n[ -7 6 ; 6 3 ],...\r\n[ -2 -7 ; -3 -8 ],...\r\n[ -6 5 ; 8 7 ],...\r\n[ 9 -9 ; 5 -9 ],...\r\n[ 6 8 ; 4 6 ],...\r\n[ 2 7 ; 5 -2 ],...\r\n[ -7 -5 ; -1 -7 ],...\r\n[ -8 -2 ; 0 -6 ]...\r\n);\r\nn = WayfindingIntersections(AB,L)\r\nn_correct = 7;\r\nassert(isequal(n,n_correct));\r\n\r\n%\r\nAB = [ 45 25 ; 23 101 ];\r\nL = cat(3,...\r\n[ 94 6 ; 2 71 ],...\r\n[ 40 -9 ; 51 84 ],...\r\n[ -8 97 ; 72 105 ],...\r\n[ 18 59 ; 36 88 ],...\r\n[ 95 56 ; 10 -6 ],...\r\n[ 61 48 ; 96 22 ],...\r\n[ 12 100 ; 94 16 ],...\r\n[ 103 90 ; 54 106 ],...\r\n[ 108 53 ; 34 68 ],...\r\n[ 9 20 ; 1 7 ],...\r\n[ 76 64 ; -8 106 ],...\r\n[ 60 9 ; 51 69 ],...\r\n[ 75 62 ; 60 -7 ],...\r\n[ 80 -8 ; 70 68 ],...\r\n[ 8 30 ; 68 67 ]...\r\n);\r\nn = WayfindingIntersections(AB,L)\r\nn_correct = 7;\r\nassert(isequal(n,n_correct));\r\n\r\n%\r\nAB = [ -5 -6 ; -2 -6 ];\r\nL = cat(3,...\r\n[ -1 -7 ; -7 -1 ],...\r\n[ -4 -6 ; -6 -5 ],...\r\n[ -7 -2 ; -1 -5 ],...\r\n[ -9 -6 ; -4 -4 ],...\r\n[ -9 -3 ; -3 -2 ],...\r\n[ -2 -1 ; -3 -2 ],...\r\n[ -4 -5 ; -6 -9 ],...\r\n[ -8 -1 ; -4 -6 ],...\r\n[ -1 -5 ; -5 -1 ],...\r\n[ -4 -6 ; -2 -5 ]...\r\n);\r\nn = WayfindingIntersections(AB,L)\r\nn_correct = 6;\r\nassert(isequal(n,n_correct));\r\n\r\n%\r\nAB = [ 1 6 ; 6 7 ];\r\nL = cat(3,...\r\n[ 5 8 ; 2 8 ],...\r\n[ 6 5 ; 3 2 ],...\r\n[ 4 8 ; 6 1 ],...\r\n[ 7 2 ; 7 9 ],...\r\n[ 1 8 ; 1 2 ],...\r\n[ 1 6 ; 1 9 ],...\r\n[ 2 6 ; 1 2 ],...\r\n[ 3 9 ; 2 4 ],...\r\n[ 5 9 ; 2 8 ],...\r\n[ 2 8 ; 2 5 ]...\r\n);\r\nn = WayfindingIntersections(AB,L)\r\nn_correct = 1;\r\nassert(isequal(n,n_correct));","published":true,"deleted":false,"likes_count":1,"comments_count":4,"created_by":6556,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":24,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":26,"created_at":"2014-02-25T14:46:37.000Z","updated_at":"2026-02-19T10:27:05.000Z","published_at":"2014-02-25T14:59:59.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.JPEG\"}],\"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\u003eThis is the first part of a series of assignments about wayfinding. The final goal is to be able to calculate the fastest route through a terrain of areas with different properties. The assignments will build on top of each other, gradually increasing the complexity, but guiding you stepwise towards the final goal. You can re-use code from preceding assignments to save some work.\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\u003eHow many times does AB cross another line?\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\u003eThe first assignment deals with the problem of finding the lines we cross while going from A to B. The answer will be the number of times the segment AB intersects with the other lines. The other lines are isolated (or intersecting) line segments of two nodes each.\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\u003eThe inputs of the function\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\u003eWayfindingIntersections(AB,L)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e are a matrix\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\u003eAB\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e of two columns, each with x-y coordinates, of our straight path from A (1st column) to B (2nd column), and a 3-dimensional matrix\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\u003eL\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e of columns with x- and y-coordinates, each column either the start or the end of a line, and with all individual lines concatenated in the 3rd dimension.\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[ AB = [\\n   xA xB\\n   yA yB\\n ]\\n\\n L = cat(3,...\\n  [ x1_start x1_end\\n    y1_start y1_end ] ...\\n   ,...\\n  [ x2_start x2_end\\n    y2_start y2_end ] ...\\n   ,...\\n  [ x3_start x3_end\\n    y3_start y3_end ] ... % etc.\\n  )]]\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\u003eYour output n will be the number of times the line AB intersects with any of the other lines. The lines will not 'just touch' AB with their begin or end.\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\u003ep.s. I noticed later on that there is another Cody problem\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=\\\"http://www.mathworks.nl/matlabcentral/cody/problems/1720-do-the-lines-intersect\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e1720\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e that is somewhat similar. But this was a logical start for the series.\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.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\"}]}"},{"id":2219,"title":"Wayfinding 2 - traversing","description":"This is the second part of a series of assignments about wayfinding. The final goal is to be able to calculate the fastest route through a terrain of areas with different properties. The assignments will build on top of each other, gradually increasing the complexity, but guiding you stepwise towards the final goal. You can re-use code from preceding assignments to save some work. See \u003chttp://www.mathworks.com/matlabcentral/cody/problems/2218-wayfinding-1-crossing [1]\u003e.\r\n\r\n*How many times does AB cross the boundary of area F?*\r\n\r\n\u003c\u003chttp://i59.tinypic.com/219vz42.png\u003e\u003e\r\n\r\nFor this second assignment in this series you have to calculate how many times we cross the boundary of a single area while going from A to B. Our path from A to B is a straight line. And the area boundary is a closed polygon consisting of a finite number of straight segments.\r\n\r\nThe inputs of the function WayfindingBoundaryCrossing(AB,F) are a matrix AB of two columns, each with x-y coordinates, of our straight path from A (1st column) to B (2nd column), and a matrix F of columns with x- and y-coordinates, each column a subsequent node of the polygon boundary of the area. The last node is connected to the first.\r\n\r\n AB = [\r\n   xA xB\r\n   yA yB\r\n ]\r\n\r\n F = [\r\n  [ x1 x2 ... xn ;\r\n    y1 y2 ... yn ]\r\n\r\nYour output n will be the number of times the line AB crosses the boundary of F. Note that AB may cross the boundary of F at a corner node of F.\r\n","description_html":"\u003cp\u003eThis is the second part of a series of assignments about wayfinding. The final goal is to be able to calculate the fastest route through a terrain of areas with different properties. The assignments will build on top of each other, gradually increasing the complexity, but guiding you stepwise towards the final goal. You can re-use code from preceding assignments to save some work. See \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/2218-wayfinding-1-crossing\"\u003e[1]\u003c/a\u003e.\u003c/p\u003e\u003cp\u003e\u003cb\u003eHow many times does AB cross the boundary of area F?\u003c/b\u003e\u003c/p\u003e\u003cimg src = \"http://i59.tinypic.com/219vz42.png\"\u003e\u003cp\u003eFor this second assignment in this series you have to calculate how many times we cross the boundary of a single area while going from A to B. Our path from A to B is a straight line. And the area boundary is a closed polygon consisting of a finite number of straight segments.\u003c/p\u003e\u003cp\u003eThe inputs of the function WayfindingBoundaryCrossing(AB,F) are a matrix AB of two columns, each with x-y coordinates, of our straight path from A (1st column) to B (2nd column), and a matrix F of columns with x- and y-coordinates, each column a subsequent node of the polygon boundary of the area. The last node is connected to the first.\u003c/p\u003e\u003cpre\u003e AB = [\r\n   xA xB\r\n   yA yB\r\n ]\u003c/pre\u003e\u003cpre\u003e F = [\r\n  [ x1 x2 ... xn ;\r\n    y1 y2 ... yn ]\u003c/pre\u003e\u003cp\u003eYour output n will be the number of times the line AB crosses the boundary of F. Note that AB may cross the boundary of F at a corner node of F.\u003c/p\u003e","function_template":"function n = WayfindingBoundaryCrossing(AB,F)\r\n  n = randi(size(F,2))-1;\r\nend","test_suite":"%%\r\nAB = [ 0 0 ; 6 -8 ];\r\nF = [\r\n      -4    4    4   -4\r\n       2    2   -4   -4\r\n  ];\r\nn = WayfindingBoundaryCrossing(AB,F);\r\nn_correct = 2;\r\nassert(isequal(n,n_correct));\r\n\r\n%%\r\nAB = [ 0 0 ; 4 -6 ];\r\nF = [\r\n      -6    4    0\r\n      -0    2   -4\r\n  ];\r\nn = WayfindingBoundaryCrossing(AB,F);\r\nn_correct = 2;\r\nassert(isequal(n,n_correct));\r\n\r\n%%\r\nAB = [ 6 -6 ; 0 0 ];\r\nF = [\r\n      -8   -8    4\r\n       2   -4   -0\r\n  ];\r\nn = WayfindingBoundaryCrossing(AB,F);\r\nn_correct = 1;\r\nassert(isequal(n,n_correct));\r\n\r\n%%\r\nAB = [ 8 -6 ; 6 -8 ];\r\nF = [\r\n      -6    0   -3    7    9    4    6   -4   -7   -2   -7   -8\r\n      -9   -9    0   -4    1    7   -0    4   -1   -7   -5   -9\r\n  ];\r\nn = WayfindingBoundaryCrossing(AB,F);\r\nn_correct = 7;\r\nassert(isequal(n,n_correct));\r\n\r\n%%\r\nn_correct = randi(9)-1;\r\nAB = [ 0 0 ; n_correct*2-9 -10 ];\r\nF = [\r\n      -2   -2    2    2   -2   -2    2    2   -2   -2    2    2   -2   -2    4    4\r\n      -8   -6   -6   -4   -4   -2   -2   -0   -0    2    2    4    4    6    6   -8\r\n  ];\r\nn = WayfindingBoundaryCrossing(AB,F);\r\nassert(isequal(n,n_correct));","published":true,"deleted":false,"likes_count":3,"comments_count":4,"created_by":6556,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":22,"test_suite_updated_at":"2014-02-26T11:59:09.000Z","rescore_all_solutions":false,"group_id":26,"created_at":"2014-02-25T15:14:11.000Z","updated_at":"2026-02-19T10:33:57.000Z","published_at":"2014-02-26T11:59:09.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.JPEG\"}],\"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\u003eThis is the second part of a series of assignments about wayfinding. The final goal is to be able to calculate the fastest route through a terrain of areas with different properties. The assignments will build on top of each other, gradually increasing the complexity, but guiding you stepwise towards the final goal. You can re-use code from preceding assignments to save some work. See\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=\\\"http://www.mathworks.com/matlabcentral/cody/problems/2218-wayfinding-1-crossing\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e[1]\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\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\u003eHow many times does AB cross the boundary of area F?\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\u003eFor this second assignment in this series you have to calculate how many times we cross the boundary of a single area while going from A to B. Our path from A to B is a straight line. And the area boundary is a closed polygon consisting of a finite number of straight segments.\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\u003eThe inputs of the function WayfindingBoundaryCrossing(AB,F) are a matrix AB of two columns, each with x-y coordinates, of our straight path from A (1st column) to B (2nd column), and a matrix F of columns with x- and y-coordinates, each column a subsequent node of the polygon boundary of the area. The last node is connected to the first.\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[ AB = [\\n   xA xB\\n   yA yB\\n ]\\n\\n F = [\\n  [ x1 x2 ... xn ;\\n    y1 y2 ... yn ]]]\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\u003eYour output n will be the number of times the line AB crosses the boundary of F. Note that AB may cross the boundary of F at a corner node of F.\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.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\"}]}"},{"id":2226,"title":"Wayfinding 4 - Crossing, level 2","description":"This is the fourth part of a series of assignments about wayfinding. The final goal of this series is to be able to calculate the fastest route through a terrain of areas with different properties. The assignments will build on top of each other, gradually increasing the complexity, but guiding you stepwise towards the final goal. You can re-use code from preceding assignments to save some work. See \u003chttp://www.mathworks.com/matlabcentral/cody/problems/2218-wayfinding-1-crossing [1]\u003e\r\n\u003chttp://www.mathworks.nl/matlabcentral/cody/problems/2219-wayfinding-2-traversing [2]\u003e \u003chttp://www.mathworks.nl/matlabcentral/cody/problems/2220-wayfinding-3-passed-areas [3]\u003e. \r\n\r\n*Which areas are traversed?*\r\n\r\n\u003c\u003chttp://i62.tinypic.com/358qa1w.png\u003e\u003e\r\n\r\nFor this fourth assignment in this series you have to calculate which areas are traversed and in which order, while going from A to B. Our path from A to B is a straight line. And the area boundaries are closed polygons consisting of a finite number of straight segments. Quite similar to \u003chttp://www.mathworks.nl/matlabcentral/cody/problems/2220-wayfinding-3-passed-areas assignment 3\u003e.\r\n\r\nHowever, now the areas may overlap. If case of traversing overlapping areas, the area with the highest index in |F| is the one listed.\r\nIf an area is crossed twice, it is listed twice in the returned vector. And if |AB| crosses first for example area |F2|, then |F3|, and then |F2| again, the output vector should contain |[ ... 2 3 2 ... ]|. That would also be the case when |F3| is contained in |F2|. But when |F2| is contained in |F3|, then |F2| is never crossed, as it has a lower index in F than |F3|. Consider the areas non-transparent and stacked on top of each other.\r\n\r\nThe inputs of the function |WayfindingPassed(AB,F)| are a matrix |AB| of two columns, each with x-y coordinates, of our straight path from A (1st column) to B (2nd column), and a cell array |F| of 2-D matrices with columns with x- and y-coordinates, each column a subsequent node of the polygon boundary of the area. The last node is implicitly connected to the first. The index of each area, to be referred to in the output vector, is equal to its position in the cell array F. \r\n\r\n AB = [\r\n   xA xB\r\n   yA yB\r\n ]\r\n\r\n F = {\r\n  [ x11 x12 ... x1n ;\r\n    y11 y12 ... y1n ]\r\n  [ x21 x22 ... x2n ;\r\n    y21 y22 ... y2n ]\r\n }\r\n\r\n\r\nYour output |f| will contain the indices in |F| of the crossed areas, in the correct order. In the example above, the correct answer is |[ 3 1 4 1 4 1]|. Crossing means 'being present in that area', so if A, the start, is in area 3, it is considered as 'crossed'.","description_html":"\u003cp\u003eThis is the fourth part of a series of assignments about wayfinding. The final goal of this series is to be able to calculate the fastest route through a terrain of areas with different properties. The assignments will build on top of each other, gradually increasing the complexity, but guiding you stepwise towards the final goal. You can re-use code from preceding assignments to save some work. See \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/2218-wayfinding-1-crossing\"\u003e[1]\u003c/a\u003e \u003ca href = \"http://www.mathworks.nl/matlabcentral/cody/problems/2219-wayfinding-2-traversing\"\u003e[2]\u003c/a\u003e \u003ca href = \"http://www.mathworks.nl/matlabcentral/cody/problems/2220-wayfinding-3-passed-areas\"\u003e[3]\u003c/a\u003e.\u003c/p\u003e\u003cp\u003e\u003cb\u003eWhich areas are traversed?\u003c/b\u003e\u003c/p\u003e\u003cimg src = \"http://i62.tinypic.com/358qa1w.png\"\u003e\u003cp\u003eFor this fourth assignment in this series you have to calculate which areas are traversed and in which order, while going from A to B. Our path from A to B is a straight line. And the area boundaries are closed polygons consisting of a finite number of straight segments. Quite similar to \u003ca href = \"http://www.mathworks.nl/matlabcentral/cody/problems/2220-wayfinding-3-passed-areas\"\u003eassignment 3\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eHowever, now the areas may overlap. If case of traversing overlapping areas, the area with the highest index in \u003ctt\u003eF\u003c/tt\u003e is the one listed.\r\nIf an area is crossed twice, it is listed twice in the returned vector. And if \u003ctt\u003eAB\u003c/tt\u003e crosses first for example area \u003ctt\u003eF2\u003c/tt\u003e, then \u003ctt\u003eF3\u003c/tt\u003e, and then \u003ctt\u003eF2\u003c/tt\u003e again, the output vector should contain \u003ctt\u003e[ ... 2 3 2 ... ]\u003c/tt\u003e. That would also be the case when \u003ctt\u003eF3\u003c/tt\u003e is contained in \u003ctt\u003eF2\u003c/tt\u003e. But when \u003ctt\u003eF2\u003c/tt\u003e is contained in \u003ctt\u003eF3\u003c/tt\u003e, then \u003ctt\u003eF2\u003c/tt\u003e is never crossed, as it has a lower index in F than \u003ctt\u003eF3\u003c/tt\u003e. Consider the areas non-transparent and stacked on top of each other.\u003c/p\u003e\u003cp\u003eThe inputs of the function \u003ctt\u003eWayfindingPassed(AB,F)\u003c/tt\u003e are a matrix \u003ctt\u003eAB\u003c/tt\u003e of two columns, each with x-y coordinates, of our straight path from A (1st column) to B (2nd column), and a cell array \u003ctt\u003eF\u003c/tt\u003e of 2-D matrices with columns with x- and y-coordinates, each column a subsequent node of the polygon boundary of the area. The last node is implicitly connected to the first. The index of each area, to be referred to in the output vector, is equal to its position in the cell array F.\u003c/p\u003e\u003cpre\u003e AB = [\r\n   xA xB\r\n   yA yB\r\n ]\u003c/pre\u003e\u003cpre\u003e F = {\r\n  [ x11 x12 ... x1n ;\r\n    y11 y12 ... y1n ]\r\n  [ x21 x22 ... x2n ;\r\n    y21 y22 ... y2n ]\r\n }\u003c/pre\u003e\u003cp\u003eYour output \u003ctt\u003ef\u003c/tt\u003e will contain the indices in \u003ctt\u003eF\u003c/tt\u003e of the crossed areas, in the correct order. In the example above, the correct answer is \u003ctt\u003e[ 3 1 4 1 4 1]\u003c/tt\u003e. Crossing means 'being present in that area', so if A, the start, is in area 3, it is considered as 'crossed'.\u003c/p\u003e","function_template":"function f = WayfindingPassed(AB,F)\r\n  f = 1:length(F);\r\nend","test_suite":"%%\r\nAB = [ -10 10 ; -10 10 ];\r\nF{1} = [\r\n    -5    5   -8    0\r\n    -6    2    7    1\r\n    ];\r\nF{2} = [\r\n    4   -2    4    6\r\n    6   -7   -3   -2\r\n    ];\r\nF{3} = [\r\n    -5    6    3   -1\r\n    -6   -8    4   -2\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [ 1 3 2 ];\r\nassert(isequal(f,f_correct));\r\n\r\n%%\r\n\r\nAB = [ 0 21 ; 0 0 ];\r\nf_correct = randperm(20);\r\nF = arrayfun(@(n)[n+[0 1 1 0];-1 -1 1 1],f_correct,'uni',0);\r\nf = WayfindingPassed(AB,F);\r\nassert(isequal(f(f_correct),f_correct(f)));\r\n\r\n%%\r\nAB = [ -10 10 ; -10 10 ];\r\nF{1} = [\r\n    -5    9    0   -4    5\r\n    2    8   -1   -9   -8\r\n    ];\r\nF{2} = [\r\n    -2  -10   -4    0\r\n    8    7   -5    5\r\n    ];\r\nF{3} = [\r\n    -6    2   10\r\n    10   -4    8\r\n    ];\r\nF{4} = [\r\n    -10    8  -10\r\n    4   -8    2\r\n    ];\r\nF{5} = [\r\n    0    4    8   -3    1\r\n    -10    9   -8   -5    2\r\n    ];\r\nF{6} = [\r\n    6    6   -9   10\r\n    6   -3    4   -7\r\n    ];\r\nF{7} = [\r\n    9    7   -7\r\n    0    7   -5\r\n    ];\r\nF{8} = [\r\n    2    0   10\r\n    6  -10    0\r\n    ];\r\nF{9} = [\r\n    -7    2   -7   -7\r\n    3    5   -3    7\r\n    ];\r\nF{10} = [\r\n    -5    6    1    5\r\n    -10    0    8    4\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [ 2 7 8 10 7 3 ];\r\nassert(isequal(f,f_correct));\r\n\r\n%%\r\nAB = [ -10 10 ; -10 10 ];\r\nF{1} = [\r\n    2    5    8    5\r\n    2   -2    9   -5\r\n    ];\r\nF{2} = [\r\n    -8    2   -2    8   -8   -2\r\n    0    4    5   -9    8   -2\r\n    ];\r\nF{3} = [\r\n    5   -6   -2    1    0   10\r\n    10   -8    0   10   -2   -5\r\n    ];\r\nF{4} = [\r\n    10   -4  -10   -2    9\r\n    4    1    8   -4   -1\r\n    ];\r\nF{5} = [\r\n    -9   -7    2   -3\r\n    2   -9   -4    5\r\n    ];\r\nF{6} = [\r\n    -3   10    6    9    4   -2\r\n    10   -6    2    2    5   -5\r\n    ];\r\nF{7} = [\r\n    -1   -5   -5\r\n    3    0   -4\r\n    ];\r\nF{8} = [\r\n    8   -6    8   10   -7\r\n    8   -2   -5    3    7\r\n    ];\r\nF{9} = [\r\n    1  -10   -3   10    5\r\n    -5   -6    3   -6    8\r\n    ];\r\nF{10} = [\r\n    -7    0    8   -8\r\n    7   -8    3    9\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [ 5 9 10 9 3 1 8 ];\r\nassert(isequal(f,f_correct));\r\n\r\n%%\r\n\r\nAB = [ 4 -6 ; 0 0 ];\r\nF{1} = [\r\n    -4   -4    2    2   -2   -3   -3   -2    2    2   -4\r\n    2   -4   -4   -2    2    2   -2   -2    2    4    4\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [ 1 ];\r\nassert(isequal(f,f_correct));\r\n\r\n%%\r\n\r\nAB = [ 0 0 ; 15 -8 ];\r\nF{1} = [\r\n    -4    4    4   -4\r\n    6    2    6    2\r\n    ];\r\nF{2} = [\r\n    -2   -2    6    6   -2\r\n    -0   -4   -0   -4   -0\r\n    ];\r\nF{3} = [\r\n    -1   -1    2    2\r\n    -6   -4   -6   -4\r\n    ];\r\nF{4} = [\r\n    -1    1   -1    1\r\n    -7   -7   -9   -9\r\n    ];\r\nF{5} = [\r\n    -2     2    -1     2    -1     1\r\n    14    10     6     6    10    14\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [ 5 5 1 2 3 4 ];\r\nassert(isequal(f,f_correct));\r\n\r\n%%\r\n\r\nAB = [ 0 0 ; -6 6 ];\r\nF{1} = [\r\n    -5    7    7   -5\r\n    -9   -9    9    9\r\n    ];\r\nF{2} = [\r\n    -1    1    1   -1\r\n    -7   -7   -5   -5\r\n    ];\r\nF{3} = [\r\n    -2   -2    2    2\r\n    4    2    2    4\r\n    ];\r\nF{4} = [\r\n    2    2   -2   -2\r\n    4    2    2    4\r\n    ];\r\nF{5} = [\r\n    -1    1    1   -1\r\n    2    2   -2   -2\r\n    ];\r\nF{6} = [\r\n    -2    0   -2\r\n    -2   -3   -4\r\n    ];\r\nF{7} = [\r\n    0    2    2\r\n    -3   -4   -2\r\n    ];\r\nF{8} = [\r\n    -1    0    1\r\n    -8   -6   -8\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [8 2 1 7 1 5 4 1];\r\nassert(isequal(f,f_correct));\r\n\r\n%%\r\n\r\nAB = [ 2 -2 ; 8 -6 ];\r\nF{1} = [\r\n    -4   -4    4    4\r\n    -4   -0   -0   -4\r\n    ];\r\nF{2} = [\r\n    -4   -4    4    4\r\n    2    6    6    2\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [2 1];\r\nassert(isequal(f,f_correct));\r\n\r\n%%\r\n\r\nAB = [ 8 -4 ; 8 -8 ];\r\nF{1} = [\r\n    -6    2    2   -4   -4    8    8   -6\r\n    -6   -6   -4   -4    2    2    4    4\r\n    ];\r\nF{2} = [\r\n    -2   -2    4    4\r\n    -0   -2   -2   -0\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [ 1 2 1 ];\r\nassert(isequal(f,f_correct));\r\n\r\n%%\r\n\r\nAB = [ -8 8 ; 8 -8 ];\r\nF{1} = [\r\n    -2   -2    0    0\r\n    -0    2    2   -0\r\n    ];\r\nF{2} = [\r\n    2    4    4   -6   -6   -4    2    4    4    2    2   -4   -4    2\r\n    -0   -0   -6   -6    4    6    6    4    2    2    4    4   -4   -4\r\n    ];\r\nF{3} = [\r\n    -3   -3    1    0\r\n    -1   -3   -3   -1\r\n    ];\r\nF{4} = [\r\n    5    9    9    5\r\n    -3   -3   -9   -9\r\n    ];\r\nF{5} = [\r\n    -9  -10  -10   -9\r\n    9    9   10   10\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [ 2 1 2 4 ];\r\nassert(isequal(f,f_correct));\r\n\r\nAB = [ 0 0 ; -8 8 ];\r\nF{1} = [\r\n    -4   -2   -2   -4\r\n    8    8    4    4\r\n    ];\r\nF{2} = [\r\n    2    4    4    2\r\n    -0   -0   -6   -6\r\n    ];\r\nF{3} = [\r\n    -4   -2   -2   -6   -6\r\n    -4   -4   -6   -6   -4\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nassert(isempty(f));\r\n\r\n%%\r\n\r\nAB = [ 7 -8 ; 0 0 ];\r\nF{1} = [\r\n    8    9    9    8\r\n    3    3   -2   -2\r\n    ];\r\nF{2} = [\r\n    -9   -7   -7   -4   -4   -3   -3    0    0    1    1    4    4    5    5   -2   -8   -9\r\n    -2   -2    2    2   -2   -2    2    2   -2   -2    2    2   -2   -2    3    4    3    2\r\n    ];\r\nF{3} = [\r\n    -2   -1   -1   -2\r\n    1    1   -4   -4\r\n    ];\r\nF{4} = [\r\n    -6   -5   -5   -3    1    2    2    3    3    1   -4   -6\r\n    1    1   -3   -5   -5   -4    1    1   -5   -8   -7   -4\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [ 2 4 2 3 2 4 2 ];\r\nassert(isequal(f,f_correct));\r\n\r\n%%\r\n\r\nAB = [ 0 -2 ; 0 -4 ];\r\nF{1} = [\r\n    -3    3    3    2    2   -2   -2    2    2   -3\r\n    -5   -5    3    3   -3   -3    2    2    3    3\r\n    ];\r\nF{2} = [\r\n    -1    1    1   -1\r\n    1    1   -1   -1\r\n    ];\r\nF{3} = [\r\n    -4    4    4    5    5   -5   -5   -4\r\n    4    4   -7   -7    5    5   -1   -1\r\n    ];\r\nF{4} = [\r\n    -5   -4   -4    4    4   -5\r\n    -1   -1   -6   -6   -7   -7\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [ 2 1 ];\r\nassert(isequal(f,f_correct));\r\n\r\n%%\r\n\r\nAB = [ -2 0 ; 6 -6 ];\r\nF{1} = [\r\n    2   -4   -4    2    2   -2    0   -2    2\r\n    -4   -4    4    4    2    2   -0   -2   -2\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [ 1 1 1 ];\r\nassert(isequal(f,f_correct));","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":6556,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":2,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2014-03-01T22:33:13.000Z","updated_at":"2014-03-06T07:49:23.000Z","published_at":"2014-03-06T07:49:23.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.JPEG\"}],\"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\u003eThis is the fourth part of a series of assignments about wayfinding. The final goal of this series is to be able to calculate the fastest route through a terrain of areas with different properties. The assignments will build on top of each other, gradually increasing the complexity, but guiding you stepwise towards the final goal. You can re-use code from preceding assignments to save some work. See\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=\\\"http://www.mathworks.com/matlabcentral/cody/problems/2218-wayfinding-1-crossing\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e[1]\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:hyperlink w:docLocation=\\\"http://www.mathworks.nl/matlabcentral/cody/problems/2219-wayfinding-2-traversing\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e[2]\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:hyperlink w:docLocation=\\\"http://www.mathworks.nl/matlabcentral/cody/problems/2220-wayfinding-3-passed-areas\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e[3]\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\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\u003eWhich areas are traversed?\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\u003eFor this fourth assignment in this series you have to calculate which areas are traversed and in which order, while going from A to B. Our path from A to B is a straight line. And the area boundaries are closed polygons consisting of a finite number of straight segments. Quite similar to\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=\\\"http://www.mathworks.nl/matlabcentral/cody/problems/2220-wayfinding-3-passed-areas\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eassignment 3\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\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\u003eHowever, now the areas may overlap. If case of traversing overlapping areas, the area with the highest index in\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\u003eF\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is the one listed. If an area is crossed twice, it is listed twice in the returned vector. And if\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\u003eAB\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e crosses first for example area\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\u003eF2\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, then\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\u003eF3\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, and then\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\u003eF2\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e again, the output vector should contain\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\u003e[ ... 2 3 2 ... ]\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. That would also be the case when\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\u003eF3\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is contained in\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\u003eF2\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. But when\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\u003eF2\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is contained in\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\u003eF3\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, then\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\u003eF2\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is never crossed, as it has a lower index in F than\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\u003eF3\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. Consider the areas non-transparent and stacked on top of each other.\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\u003eThe inputs of the function\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\u003eWayfindingPassed(AB,F)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e are a matrix\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\u003eAB\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e of two columns, each with x-y coordinates, of our straight path from A (1st column) to B (2nd column), and a cell array\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\u003eF\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e of 2-D matrices with columns with x- and y-coordinates, each column a subsequent node of the polygon boundary of the area. The last node is implicitly connected to the first. The index of each area, to be referred to in the output vector, is equal to its position in the cell array F.\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[ AB = [\\n   xA xB\\n   yA yB\\n ]\\n\\n F = {\\n  [ x11 x12 ... x1n ;\\n    y11 y12 ... y1n ]\\n  [ x21 x22 ... x2n ;\\n    y21 y22 ... y2n ]\\n }]]\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\u003eYour output\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\u003ef\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e will contain the indices in\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\u003eF\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e of the crossed areas, in the correct order. In the example above, the correct answer is\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\u003e[ 3 1 4 1 4 1]\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. Crossing means 'being present in that area', so if A, the start, is in area 3, it is considered as 'crossed'.\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.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\"}]}"}],"term":"tag:\"intersection\"","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:\"intersection\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"intersection\"","","\"","intersection","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007ff7d7bdac00\u003e":null,"#\u003cMathWorks::Search::Field:0x00007ff7d7bdaa20\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007ff7d7bd99e0\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007ff7d7bdb240\u003e":1,"#\u003cMathWorks::Search::Field:0x00007ff7d7bdb1a0\u003e":50,"#\u003cMathWorks::Search::Field:0x00007ff7d7bdaf20\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007ff7d7bdade0\u003e":"tag:\"intersection\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007ff7d7bdade0\u003e":"tag:\"intersection\""},"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:\"intersection\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"intersection\"","","\"","intersection","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007ff7d7bdac00\u003e":null,"#\u003cMathWorks::Search::Field:0x00007ff7d7bdaa20\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007ff7d7bd99e0\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007ff7d7bdb240\u003e":1,"#\u003cMathWorks::Search::Field:0x00007ff7d7bdb1a0\u003e":50,"#\u003cMathWorks::Search::Field:0x00007ff7d7bdaf20\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007ff7d7bdade0\u003e":"tag:\"intersection\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007ff7d7bdade0\u003e":"tag:\"intersection\""},"queried_facets":{}},"options":{"fields":["id","difficulty_rating"]},"join":" "},"results":[{"id":45196,"difficulty_rating":"easy"},{"id":1720,"difficulty_rating":"medium"},{"id":2220,"difficulty_rating":"medium"},{"id":58852,"difficulty_rating":"medium"},{"id":60925,"difficulty_rating":"medium"},{"id":2218,"difficulty_rating":"medium"},{"id":2219,"difficulty_rating":"medium"},{"id":2226,"difficulty_rating":"unrated"}]}}