{"id":8130,"date":"2026-07-17T18:16:44","date_gmt":"2026-07-17T23:16:44","guid":{"rendered":"https:\/\/justinparrtech.com\/JustinParr-Tech\/?p=8130"},"modified":"2026-07-17T18:19:32","modified_gmt":"2026-07-17T23:19:32","slug":"worlds-best-circle-algorithm","status":"publish","type":"post","link":"https:\/\/justinparrtech.com\/JustinParr-Tech\/worlds-best-circle-algorithm\/","title":{"rendered":"World&#8217;s Best Circle Algorithm"},"content":{"rendered":"<p>Here is THE fastest and most computationally-efficient circle algorithm.<\/p>\n<p><!--more--><\/p>\n<p>&nbsp;<\/p>\n\n<p>&nbsp;<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\"><p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<\/div><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/worlds-best-circle-algorithm\/#the-goods\" >The Goods<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/worlds-best-circle-algorithm\/#traditional-circle-drawing-%e2%80%93-trig\" >Traditional Circle-Drawing &#8211; Trig<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/worlds-best-circle-algorithm\/#quadratic-circles\" >Quadratic Circles<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/worlds-best-circle-algorithm\/#conclusion\" >Conclusion<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"the-goods\"><\/span>The Goods<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>I hate long articles or videos without a &#8220;GET TO THE POINT&#8221; button, so here are the goods:<\/p>\n<pre>\/\/ Example implemented in JavaScript\r\n\r\nvar canvas, ctx, imagedata; \/\/globals\r\n\r\nfunction init(){\r\n  canvas=document.getElementById(\"thecanvas\"); \/\/assumes you have a canvas in your HTML with ID=\"thecanvas\"\r\n  ctx=canvas.getContext(\"2d\",{willReadFrequently:true});\r\n  imgdata=ctx.getImageData(0,0,canvas.width,canvas.height); \/\/pixel data in imgdata.data[R,G,B,A,...]\r\n\r\n  \/\/draw a green circle with a yellow border\r\n  XfillCircle(300,200,150,0,0xFF,0);\r\n  XstrokeCircle(300,200,150,0xFF,0xFF,0);\r\n  draw();\r\n}\r\nwindow.onload=init;\r\n\r\nfunction plot(x,y,r,g,b){\r\n  \/\/ r,g,b = 1 unsigned byte each for red,green,blue\r\n  p=(y*canvas.width+x)*4;\r\n  imagedata.data[p  ]=r;\r\n  imagedata.data[p+1]=g;\r\n  imagedata.data[p+2]=b;\r\n  imagedata.data[p+3]=0xFF;\r\n}\r\n\r\nfunction draw(){  \/\/paints image data to canvas\r\n  ctx.putImageData(imagedata,0,0);\r\n}\r\n\r\nfunction XfillCircle(cx,cy,radius,r,g,b){\r\n  var x,y,x1,x2,xx;\r\n  var ys;\r\n  var rs=radius*radius;\r\n\r\n  for(y=-radius ; y&lt;=0 ; y++){\r\n    ys=y*y;\r\n    x=Math.trunc(Math.sqrt(rs-ys));\r\n    x1=cx-x;\r\n    x2=cx+x;\r\n\r\n    for(xx=x1 ; xx&lt;=x2 ; xx++){\r\n      plot(xx,cy-y,r,g,b);    \/\/top half\r\n      plot(xx,cy+y,r,g,b);    \/\/bottom half\r\n    } \/\/for xx\r\n  } \/\/for y\r\n} \/\/fillCircle\r\n\r\nfunction XstrokeCircle(cx,cy,radius,r,g,b){\r\n  var x,y;\r\n  var ys;\r\n  var rs=radius*radius;\r\n  var r2=Math.trunc(r*0.707);  \/\/ if r=1, at 45 degrees, the vertical component of r would be 1\/sqrt(2)=0.707\r\n  \r\n  for(y=-r2 ; y&lt;=0 ; y++){\r\n    ys=y*y;\r\n    x=Math.trunc(Math.sqrt(rs-ys));\r\n\r\n    plot(cx-x , cy-y , r,g,b );  \/\/upper-left side\r\n    plot(cx+x , cy-y , r,g,b );  \/\/upper-right side\r\n    plot(cx-x , cy+y , r,g,b );  \/\/lower-left side\r\n    plot(cx+x , cy+y , r,g,b );  \/\/lower-right side\r\n\r\n    \/\/swap x\/y to cover sparse areas\r\n    plot(cx-y , cy-x , r,g,b );  \/\/top-left\r\n    plot(cx-y , cy+x , r,g,b );  \/\/bottom-left\r\n    plot(cx+y , cy-x , r,g,b );  \/\/top-right\r\n    plot(cx+y , cy+x , r,g,b );  \/\/bottom-right\r\n  }\r\n}\r\n<\/pre>\n<p>For a more detailed explanation of what this is and how it works, read on!<\/p>\n<p>&nbsp;<\/p>\n<h2><span class=\"ez-toc-section\" id=\"traditional-circle-drawing-%e2%80%93-trig\"><\/span>Traditional Circle-Drawing &#8211; Trig<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Traditionally, computers draw circles using trigonometry.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-8136\" src=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-content\/uploads\/Circle-trig.png\" alt=\"\" width=\"259\" height=\"182\" \/><\/p>\n<p>Many people think of a circle in &#8220;degrees&#8221;, where a circle is 360 degrees.\u00a0 However, most computer languages think in radians, where there are 2\u03c0 radians in a circle.\u00a0 So if we sweep an angle, \u03b1 from 0 (starting on the right) counter-clockwise through 2\u03c0, we end up in the same place, and have drawn a complete circle.<\/p>\n<table>\n<tbody>\n<tr>\n<th>Degrees<\/th>\n<th>Radians<\/th>\n<\/tr>\n<tr>\n<td>0=360<\/td>\n<td>0=2\u03c0<\/td>\n<\/tr>\n<tr>\n<td>90<\/td>\n<td>\u03c0\/2<\/td>\n<\/tr>\n<tr>\n<td>180<\/td>\n<td>\u03c0<\/td>\n<\/tr>\n<tr>\n<td>270<\/td>\n<td>3\u03c0\/2<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>As we perform the sweep, we use sin and cos to find the x and y coordinate corresponding to each angle.\u00a0 Understanding that this will give us a point relative to coordinate (0,0), we add an offset to the center of the circle.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-8134\" src=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-content\/uploads\/Circle-offset.png\" alt=\"\" width=\"206\" height=\"178\" \/><\/p>\n<p>Therefore, given a radius of &#8220;r&#8221; and a center point (cx,cy), for any angle \u03b1:<\/p>\n<ul>\n<li>x = cx + r * cos(\u03b1)<\/li>\n<li>y = cy + r * sin(\u03b1)<\/li>\n<\/ul>\n<p>The final puzzle piece is how much to increment \u03b1 at each iteration, to ensure that every pixel is drawn properly?<\/p>\n<blockquote><p>C (Circumference of a circle) = \u03c0 * d (diameter)<\/p>\n<p>d = r (radius) * 2, therefore<\/p>\n<p>C = 2\u03c0r<\/p>\n<p>C is the number of pixels you have to draw, and a complete circle is 2\u03c0 radians, so:<\/p>\n<p>\u03b1i (incremental angle) = 2\u03c0 \/ 2\u03c0r<\/p>\n<p>And, what&#8217;s nice about radians is that everything cancels:<\/p>\n<p>\u03b1i = 1 \/ r<\/p><\/blockquote>\n<p>In code, drawing a circle using trig would look like this:<\/p>\n<pre>const pi2=2*Math.PI;\r\n\r\nfunction XtrigCircle(cx , cy , radius , r,g,b){\r\n  var ai=1\/radius; \/\/ incremental angle\r\n  var x,y;\r\n\r\n  for(var a = 0 ; a&lt;pi2 ; a+=ai){\r\n    x=Math.trunc( radius * Math.cos(a) );\r\n    y=Math.trunc( radius * Math.sin(a) );\r\n\r\n    plot( cx + x , cy + y ,r,g,b);\r\n  }\r\n}<\/pre>\n<p>Here is a sample output using 0..\u03c0\/2 (90 degrees) in order to demonstrate how the sweep works:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-8140 size-full\" style=\"width: 427 !important; height: 423 !important;\" src=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-content\/uploads\/Output-trig-90deg.png\" alt=\"\" width=\"427\" height=\"423\" srcset=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-content\/uploads\/Output-trig-90deg.png 427w, https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-content\/uploads\/Output-trig-90deg-300x297.png 300w, https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-content\/uploads\/Output-trig-90deg-150x150.png 150w\" sizes=\"auto, (max-width: 427px) 100vw, 427px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>This works fine for an outline of a circle, but how do we draw a filled circle?<\/p>\n<p>At first thought, drawing concentric circles (incrementing the radius) seems like a good idea, but it&#8217;s computationally-expensive.<\/p>\n<p>Instead, we can exploit the symmetrical properties of a circle:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-8135\" src=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-content\/uploads\/Circle-symmetry.png\" alt=\"\" width=\"272\" height=\"149\" \/><\/p>\n<p>The concept is to do a 90-degree sweep through the (+,+) quadrant to get all of the (x,y) points, but use symmetry to mirror them within the other quadrants.\u00a0 Here is a revised circle-outline function using symmetry:<\/p>\n<pre>const piDiv2=Math.PI\/2;\r\n\r\nfunction XtrigCircle2( cx , cy , radius , r,g,b ){\r\n  var ai=1\/radius;\r\n  var x,y;\r\n\r\n  for( var a=0 ; a&lt;=piDiv2 ; a+=ai ){\r\n    x=Math.trunc( radius * Math.cos(a) );\r\n    y=Math.trunc( radius * Math.sin(a) );\r\n\r\n    plot( cx+x , cy+y , r,g,b ); \/\/ lower-right\r\n    plot( cx-x , cy+y , r,g,b ); \/\/ lower-left\r\n    plot( cx+x , cy-y , r,g,b ); \/\/ upper-right\r\n    plot( cx-x , cy-y , r,g,b ); \/\/ upper-left\r\n  }\r\n}<\/pre>\n<p>Output from the above:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-8139 size-full\" src=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-content\/uploads\/Output-formula-3.png\" alt=\"\" width=\"403\" height=\"399\" srcset=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-content\/uploads\/Output-formula-3.png 403w, https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-content\/uploads\/Output-formula-3-300x297.png 300w, https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-content\/uploads\/Output-formula-3-150x150.png 150w\" sizes=\"auto, (max-width: 403px) 100vw, 403px\" \/><\/p>\n<p>To convert this to a filled circle, we loop from the left-half to the right-half:<\/p>\n<pre>function XtrigFillCircle( cx , cy , radius ,r,g,b ){\r\n  var ai=1\/radius;\r\n  var x,y,x1,x2,y1,y2;\r\n\r\n  for(var a=0 ; a&lt;=piDiv2 ; a+=ai) {  \/\/ see above for piDiv2\r\n    x=Math.trunc( radius * Math.cos(a) );\r\n    y=Math.trunc( radius * Math.sin(a) );\r\n\r\n    y1=cy-y;\r\n    y2=cy+y;\r\n    x1=cx-x;\r\n    x2=cx+x;\r\n\r\n    for(var xx=x1 ; xx&lt;=x2 ; xx++){\r\n      plot( xx , y1 , r,g,b );  \/\/ upper half\r\n      plot( xx , y2 , r,g,b );  \/\/ lower half\r\n    }\r\n  }\r\n}<\/pre>\n<p>Here is the output of the trig-fill function:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-8147 size-full\" src=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-content\/uploads\/Output-trig-fill.png\" alt=\"\" width=\"405\" height=\"402\" srcset=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-content\/uploads\/Output-trig-fill.png 405w, https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-content\/uploads\/Output-trig-fill-300x298.png 300w, https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-content\/uploads\/Output-trig-fill-150x150.png 150w\" sizes=\"auto, (max-width: 405px) 100vw, 405px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h2><span class=\"ez-toc-section\" id=\"quadratic-circles\"><\/span>Quadratic Circles<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Aside from trigonometry, a circle can be defined by this quadratic equation:<\/p>\n<blockquote><p>x<sup>2<\/sup> + y<sup>2<\/sup> = r<sup>2<\/sup><\/p><\/blockquote>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-8132\" src=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-content\/uploads\/Circle-formula.png\" alt=\"\" width=\"240\" height=\"134\" \/><\/p>\n<p>As you can see, this is related to the Pythagorean theorem, where any given radius of the circle is the hypotenuse of a right triangle (similar to trigonometry).<\/p>\n<table>\n<tbody>\n<tr>\n<td>x<sup>2<\/sup> + y<sup>2<\/sup> = r<sup>2<\/sup><\/td>\n<td>(x,y) lies on the circumference<\/td>\n<\/tr>\n<tr>\n<td>x<sup>2<\/sup> + y<sup>2<\/sup> &lt; r<sup>2<\/sup><\/td>\n<td>(x,y) lies on the interior<\/td>\n<\/tr>\n<tr>\n<td>x<sup>2<\/sup> + y<sup>2<\/sup> &gt; r<sup>2<\/sup><\/td>\n<td>(x,y) lies outside<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Instead of sweeping a range of angles in order to draw the circumference, we can sweep a range of y values { -r .. r }, then for a given y, solve for x:<\/p>\n<blockquote><p>y = { -r .. r }<\/p>\n<p>x = sqrt( r<sup>2<\/sup>\u00a0&#8211; y<sup>2<\/sup>\u00a0)<\/p><\/blockquote>\n<p>Taking in to account an offset to the center, we can plot the following coordinates:<\/p>\n<ul>\n<li>( cx &#8211; x , cy + y )\u00a0 \/\/ left half<\/li>\n<li>( cx + x , cy + y )\u00a0 \/\/ right half<\/li>\n<\/ul>\n<p>Further, we can exploit symmetry, as we did above for the trig-based function by cutting the range in half, where y = { 0 .. r }<\/p>\n<ul>\n<li>(cx -x , cy -y ) \/\/ upper-left<\/li>\n<li>(cx+x , cy-y)\u00a0 \/\/ upper-right<\/li>\n<li>(cx-x , cy+y)\u00a0 \/\/ lower-left<\/li>\n<li>(cx+x , cy+y)\u00a0 \/\/lower-right<\/li>\n<\/ul>\n<p>Here is an example for drawing solid circles using the quadratic equation for a circle:<\/p>\n<pre>function XquadFillCircle( cx , cy , radius , r,g,b ){\r\n  var x,xx,y,x1,x2,y1,y2;\r\n\r\n  var ys, rs=radius * radius;\r\n\r\n  for( y=0 ; y&lt;=r ; y++ ){\r\n    ys=y*y;\r\n    x=Math.trunc( Math.sqrt( rs-ys ) );\r\n\r\n    y1=cy-y;\r\n    y2=cy+y;\r\n    x1=cx-x;\r\n    x2=cx+x;\r\n\r\n    for( xx=x1 ; xx&lt;=x2 ; xx++ ){\r\n      plot( xx , y1 , r,g,b );  \/\/ top half\r\n      plot( xx , y2 , r,g,b );  \/\/ bottom half\r\n    }\r\n  }\r\n}<\/pre>\n<p>This produces nearly the same filled circle from the trig-fill example above:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-8147 size-full\" src=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-content\/uploads\/Output-trig-fill.png\" alt=\"\" width=\"405\" height=\"402\" srcset=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-content\/uploads\/Output-trig-fill.png 405w, https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-content\/uploads\/Output-trig-fill-300x298.png 300w, https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-content\/uploads\/Output-trig-fill-150x150.png 150w\" sizes=\"auto, (max-width: 405px) 100vw, 405px\" \/><\/p>\n<p>However, if we do just an outline by plotting just x1 and x2 rather than looping, we get the following:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-8137 size-full\" src=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-content\/uploads\/Output-formula-1.png\" alt=\"\" width=\"398\" height=\"394\" srcset=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-content\/uploads\/Output-formula-1.png 398w, https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-content\/uploads\/Output-formula-1-300x297.png 300w\" sizes=\"auto, (max-width: 398px) 100vw, 398px\" \/><\/p>\n<p>The gaps at the top and bottom occur because our code assumes there is only one x coord for every given y coord, and we are using y as our independent variable.\u00a0 As the slope increases beyond 45 degrees, we would need to use x as the independent variable in order to maintain single-pixel stepping.<\/p>\n<p>To accomplish this we can exploit another symmetry of circles.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-8133 size-full\" src=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-content\/uploads\/Circle-formula-symmetry.png\" alt=\"\" width=\"355\" height=\"288\" srcset=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-content\/uploads\/Circle-formula-symmetry.png 355w, https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-content\/uploads\/Circle-formula-symmetry-300x243.png 300w\" sizes=\"auto, (max-width: 355px) 100vw, 355px\" \/><\/p>\n<p>If an angle is below 45 degrees ( \u03c0\/\/4 ) we can single-step y (top, partial circle in the diagram above).\u00a0 However, since x and y are symmetrical, we can swap them in order to form the top and bottom of the circle (bottom, partial circle in the diagram above).<\/p>\n<p>The point where 45 degrees ( \u03c0\/\/4 ) intercepts the vertical axis can be found by two different methods:<\/p>\n<blockquote><p>if \u03b1 = \u03c0\/2 then cos(\u03b1) = sin(\u03b1) = 0.707<\/p>\n<p>and<\/p>\n<p>if right \u0394 with hypotenuse r=1, and sides a=b, then<\/p>\n<p>r<sup>2<\/sup> = a<sup>2<\/sup>\u00a0+ b<sup>2<\/sup><\/p>\n<p>Since a = b,<\/p>\n<p>r<sup>2<\/sup>\u00a0= 2a<sup>2<\/sup><\/p>\n<p>Since r=1,<\/p>\n<p>a<sup>2<\/sup> = 1\/2, and<\/p>\n<p>a = 0.707<\/p>\n<p>So, if we want to loop from our intercept point&#8230;<\/p>\n<p>r&#8217; = r * 0.707, and our range is<\/p>\n<p>y = { 0 .. r&#8217; }<\/p><\/blockquote>\n<p>In Javascript, it looks like this:<\/p>\n<pre>function XquadCircle( cx , cy , radius , r,g,b ){\r\n  var x,y,x1,x2,y1,y2;\r\n  var rs=radius*radius;\r\n  var ys;\r\n  var rp=Math.trunc( radius * 0.707 );\r\n\r\n  for( y=0 ; y&lt;=rp ; y++){\r\n    ys=y*y;\r\n    x=Math.trunc( Math.sqrt(rs - ys) );\r\n\r\n    plot( cx-x , cy-y ,r,g,b );  \/\/ left-upper\r\n   \u00a0plot( cx+x , cy-y ,r,g,b );  \/\/ right-upper\r\n    plot( cx-x , cy+y ,r,g,b );  \/\/ left-lower\r\n    plot( cx+x , cy+y ,r,g,b );  \/\/ right-lower\r\n  }\r\n}<\/pre>\n<p>And, the output looks like this:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-8138\" src=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-content\/uploads\/Output-formula-2.png\" alt=\"\" width=\"415\" height=\"405\" srcset=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-content\/uploads\/Output-formula-2.png 415w, https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-content\/uploads\/Output-formula-2-300x293.png 300w\" sizes=\"auto, (max-width: 415px) 100vw, 415px\" \/><\/p>\n<p>As expected, we see the left and right sides.\u00a0 To get the top and bottom, we need to add four more plots which transpose x and y offsets:<\/p>\n<pre>for(y...\r\n  ...\r\n  plot( cx-y , cy-x ,r,g,b );  \/\/ top-left\r\n  plot( cx-y , cy+x ,r,g,b );  \/\/ bottom-left\r\n  plot( cx+y , cy-x ,r,g,b );  \/\/ top-right\r\n  plot( cx+y , cy+x ,r,g,b );  \/\/ bottom-right\r\n  ...\r\n}<\/pre>\n<p>And we get a complete circle:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-8139\" src=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-content\/uploads\/Output-formula-3.png\" alt=\"\" width=\"403\" height=\"399\" srcset=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-content\/uploads\/Output-formula-3.png 403w, https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-content\/uploads\/Output-formula-3-300x297.png 300w, https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-content\/uploads\/Output-formula-3-150x150.png 150w\" sizes=\"auto, (max-width: 403px) 100vw, 403px\" \/><\/p>\n<p>&nbsp;<\/p>\n<h2><span class=\"ez-toc-section\" id=\"conclusion\"><\/span>Conclusion<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Making circles using the quadratic formula for a circle is fast and easy, and way more computationally-efficient.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Here is THE fastest and most computationally-efficient circle algorithm.<\/p>\n","protected":false},"author":16,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-8130","post","type-post","status-publish","format-standard","hentry","category-other-stuff"],"_links":{"self":[{"href":"https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-json\/wp\/v2\/posts\/8130","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-json\/wp\/v2\/users\/16"}],"replies":[{"embeddable":true,"href":"https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-json\/wp\/v2\/comments?post=8130"}],"version-history":[{"count":10,"href":"https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-json\/wp\/v2\/posts\/8130\/revisions"}],"predecessor-version":[{"id":8162,"href":"https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-json\/wp\/v2\/posts\/8130\/revisions\/8162"}],"wp:attachment":[{"href":"https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-json\/wp\/v2\/media?parent=8130"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-json\/wp\/v2\/categories?post=8130"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-json\/wp\/v2\/tags?post=8130"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}