Circles of given radius through two points: Difference between revisions
Content deleted Content added
m →{{header|Ruby}}: comment; spaces |
|||
Line 21: | 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 |
* [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}}== |
=={{header|D}}== |
||
{{trans|Python}} |
{{trans|Python}} |