Circles of given radius through two points: Difference between revisions

m (→‎{{header|Ruby}}: comment; spaces)
Line 21:
* [http://mathforum.org/library/drmath/view/53027.html Finding the Center of a Circle from 2 Points and Radius] from Math forum @ Drexel
 
=={{header|C}}==
<lang>
/*Abhishek Ghosh, 7th November 2013, Rotterdam*/
 
#include<stdio.h>
#include<math.h>
 
typedef struct{
double x,y;
}point;
double distance(point p1,point p2)
{
return sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
}
void findCircles(point p1,point p2,double radius)
{
double separation = distance(p1,p2),mirrorDistance;
if(separation == 0.0)
{
radius == 0.0 ? printf("\nNo circles can be drawn through (%.4f,%.4f)",p1.x,p1.y):
printf("\nInfinitely many circles can be drawn through (%.4f,%.4f)",p1.x,p1.y);
}
else if(separation == 2*radius)
{
printf("\nGiven points are opposite ends of a diameter of the circle with center (%.4f,%.4f) and radius %.4f",(p1.x+p2.x)/2,(p1.y+p2.y)/2,radius);
}
else if(separation > 2*radius)
{
printf("\nGiven points are farther away from each other than a diameter of a circle with radius %.4f",radius);
}
else
{
mirrorDistance =sqrt(pow(radius,2) - pow(separation/2,2));
printf("\nTwo circles are possible.");
printf("\nCircle C1 with center (%.4f,%.4f), radius %.4f and Circle C2 with center (%.4f,%.4f), radius %.4f",(p1.x+p2.x)/2 + mirrorDistance*(p1.y-p2.y)/separation,(p1.y+p2.y)/2 + mirrorDistance*(p2.x-p1.x)/separation,radius,(p1.x+p2.x)/2 - mirrorDistance*(p1.y-p2.y)/separation,(p1.y+p2.y)/2 - mirrorDistance*(p2.x-p1.x)/separation,radius);
}
}
 
int main()
{
int i;
 
point cases[] =
{ {0.1234, 0.9876}, {0.8765, 0.2345},
{0.0000, 2.0000}, {0.0000, 0.0000},
{0.1234, 0.9876}, {0.1234, 0.9876},
{0.1234, 0.9876}, {0.8765, 0.2345},
{0.1234, 0.9876}, {0.1234, 0.9876}
};
 
double radii[] = {2.0,1.0,2.0,0.5,0.0};
 
for(i=0;i<5;i++)
{
printf("\nCase %d)",i+1);
findCircles(cases[2*i],cases[2*i+1],radii[i]);
}
 
return 0;
}
</lang>
And test run :
<pre>
Case 1)
Two circles are possible.
Circle C1 with center (1.8631,1.9742), radius 2.0000 and Circle C2 with center (-0.8632,-0.7521), radius 2.0000
Case 2)
Given points are opposite ends of a diameter of the circle with center (0.0000,1.0000) and radius 1.0000
Case 3)
Infinitely many circles can be drawn through (0.1234,0.9876)
Case 4)
Given points are farther away from each other than a diameter of a circle with radius 0.5000
Case 5)
No circles can be drawn through (0.1234,0.9876)
</pre>
=={{header|D}}==
{{trans|Python}}
503

edits