Circle passing by three given points in OpenSCAD

This OpenSCAD module computes the circle passing by three given points on the XY plane.
For faster access, the code contained in the file is pasted below.
point1 = [0,0];point2 = [10,0];point3 = [0,-10];module circle3p(p1, p2, p3) {h=-((p2.y-p1.y)*pow(p3.y,2)+(-pow(p2.y,2)+pow(p1.y,2)-pow(p2.x,2)+pow(p1.x,2))*p3.y+p1.y*pow(p2.y,2)+(-pow(p1.y,2)+pow(p3.x,2)-pow(p1.x,2))*p2.y+(pow(p2.x,2)-pow(p3.x,2))*p1.y)/((2*p2.x-2*p1.x)*p3.y+(2*p1.x-2*p3.x)*p2.y+(2*p3.x-2*p2.x)*p1.y);k=((p2.x-p1.x)*pow(p3.y,2)+(p1.x-p3.x)*pow(p2.y,2)+(p3.x-p2.x)*pow(p1.y,2)+(p2.x-p1.x)*pow(p3.x,2)+(pow(p1.x,2)-pow(p2.x,2))*p3.x+p1.x*pow(p2.x,2)-pow(p1.x,2)*p2.x)/((2*p2.x-2*p1.x)*p3.y+(2*p1.x-2*p3.x)*p2.y+(2*p3.x-2*p2.x)*p1.y); r=(sqrt(pow(p2.y,2)-2*p1.y*p2.y+pow(p1.y,2)+pow(p2.x,2)-2*p1.x*p2.x+pow(p1.x,2))*sqrt(pow(p3.y,2)-2*p1.y*p3.y+pow(p1.y,2)+pow(p3.x,2)-2*p1.x*p3.x+pow(p1.x,2))*sqrt(pow(p3.y,2)-2*p2.y*p3.y+pow(p2.y,2)+pow(p3.x,2)-2*p2.x*p3.x+pow(p2.x,2)))/abs((2*p2.x-2*p1.x)*p3.y+(2*p1.x-2*p3.x)*p2.y+(2*p3.x-2*p2.x)*p1.y); translate([h,k]) circle(r);}circle3p(point1, point2, point3);