Author: Joseph Tadeusz
Date: 10:02:35 02/11/06
Go up one level in this thread
#include <math.h> int main() { double r, // radius cone h, // height cone R, // radius sphere x,y,centre, volume_sphere; double maxd=0,displ,limit,pi=3.14159265,submerged; double slope; double alpha; // angle of cone with x axis double bestR,bestx,besty,bestcentre,bestlimit,bestsubmerged; double bestvolume_sphere,bestslope; printf("enter cone radius...\n"); scanf("%lf",&r); printf("enter cone height...\n"); scanf("%lf",&h); slope = r/h; alpha = atan(slope); for(R = r / 4; R < 4 * r; R += .0001) {// go from small to big sphere y = R * cos(alpha); // y coordinate of contact if(y > r) // outside cone break; x = (h / r) * y; // x coordinate of contact centre = x + R * sin(alpha); // x coordinate of centre of sphere limit = centre + R; // x coordinate of far out limit of sphere if(limit < h) // too deep inside cone continue; if(limit > 4 * R + h) // too far outside cone break; submerged = 2 * R - (limit - h); // x linesegment of sphere inside cone // displacement: http://www.lmnoeng.com/Volume/CylConeSphere.htm displ = ( pi / 3 ) * submerged * submerged * ( 1.5 * 2 * R - submerged); if(displ >= maxd) { maxd = displ; volume_sphere = 1.3333333*pi*R*R*R; bestR = R; bestx = x; besty = y; bestcentre = centre; bestlimit = limit; bestsubmerged = submerged; bestvolume_sphere = volume_sphere; bestslope = slope; } } printf("displacement=%f radius=%f x=%f y=%f centre=%f limit=%lf \ submerged=%f volume_sphere=%f\n",\ maxd,bestR,bestx,besty,bestcentre,bestlimit,bestsubmerged, bestvolume_sphere); printf("formula for slope: y = %f * x\n",bestslope); printf("formula for circle: y = sqrt(%f * %f - (x - %f)^2)\n",\ bestR,bestR,bestcentre); return 0; } Here's my version of the cone/sphere problem. The formulas in the output can be used in a plotting utility like kplot to get a picture. I can't guarantee that it's correct.
This page took 0 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.