{"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":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\"}]}"}],"problem_search":{"errors":[],"problems":[{"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\"}]}"}],"term":"tag:\"shift matrix\"","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:\"shift matrix\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"shift matrix\"","","\"","shift matrix","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007ff7afa08710\u003e":null,"#\u003cMathWorks::Search::Field:0x00007ff7afa085d0\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007ff7afa07b30\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007ff7afa08a30\u003e":1,"#\u003cMathWorks::Search::Field:0x00007ff7afa088f0\u003e":50,"#\u003cMathWorks::Search::Field:0x00007ff7afa08850\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007ff7afa087b0\u003e":"tag:\"shift matrix\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007ff7afa087b0\u003e":"tag:\"shift matrix\""},"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:\"shift matrix\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"shift matrix\"","","\"","shift matrix","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007ff7afa08710\u003e":null,"#\u003cMathWorks::Search::Field:0x00007ff7afa085d0\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007ff7afa07b30\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007ff7afa08a30\u003e":1,"#\u003cMathWorks::Search::Field:0x00007ff7afa088f0\u003e":50,"#\u003cMathWorks::Search::Field:0x00007ff7afa08850\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007ff7afa087b0\u003e":"tag:\"shift matrix\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007ff7afa087b0\u003e":"tag:\"shift matrix\""},"queried_facets":{}},"options":{"fields":["id","difficulty_rating"]},"join":" "},"results":[{"id":58852,"difficulty_rating":"medium"}]}}