Re: Balance point of a solid
- To: mathgroup at smc.vnet.net
- Subject: [mg113695] Re: Balance point of a solid
- From: Ray Koopman <koopman at sfu.ca>
- Date: Mon, 8 Nov 2010 03:38:15 -0500 (EST)
- References: <iaongn$jft$1@smc.vnet.net>
On Nov 2, 2:00 am, Daniel Lichtblau <d... at wolfram.com> wrote: > Andreas wrote: >> Hi everyone, >> >> This isn't strictly a Mathematica question, but once I formulate a way >> to think about the problem, I'll use Mathematica to generate solutions >> to specific situations. Besides, this seems like the smartest forum >> going. So... >> >> Background >> >> Start with a equilateral triangle as the base of a solid. The triangle >> has sides: >> >> a1 = a2 = a3 = 1 >> >> At right angles to each side of this base triangle stands a trapezoid >> with heights: >> >> h1 , h2, h3 >> >> These heights may have different lengths. Typically h1 > h2 > h3, >> but in some cases any or all of them could have equal values. >> >> Of course, all the h's stand at right angles to the base triangle. >> >> Now connect the points of h1, h2, and h3 and we have a solid composed >> of: >> >> 1 equilateral triangle (the base) >> 3 different trapezoids all with their base lengths =1 >> 1 triangle on top. >> >> I can find the area of each trapezoid like this: >> >> A = area >> A1 = 1/2 x a1 x (h1 + h3) >> A2 = 1/2 x a2 x (h1 + h2) >> A3 = 1/2 x a3 x (h2 + h3) >> >> I can find the volume like this: >> >> Volume = V >> >> V = A1 x A2 x A3 >> or >> V = (a1 x a2 x a3 x (h1 + h3) x (h1 + h2) x (h2 + h3)) / 2^3 >> >> Problem: >> >> I need to find the point on the base triangle upon which I can balance >> the solid. >> >> This is not the centroid of the base triangle, because the solid would >> have more weight or volume towards it's highest side, typically h1. >> >> Simply described, I want to find the balance point on the base >> triangle such that if the solid rested on a pin at that point, the >> base triangle would remain parallel to the floor. >> >> My guess is that I need to calculate the center of gravity of the >> volume, then project a line to the base triangle where it would >> intersect the base triangle at a right angle. Basically just dropping >> the center of gravity to the bottom plane. >> >> Maybe a bit tedious, but I should have all the information to >> calculate this. Given the right angles and known lengths I think I >> have enough information to calculate all angles and lengths of the >> solid. >> >> Will this work? >> >> How would I calculate the center gravity for the solid described? >> >> Follow up question... >> >> If this solves the problem for a 3 dimensional solid of this nature, >> how can I extend the solution to a 4th, 5th, or nth dimensional >> space? >> >> Thanks to all. >> >> A > > Seems plausible to do this way. Suppose it were not the projection of > the center of mass (that is, it teeters in some direction). Then there > would be a slicing plane perp to the face you are balancing, and through > the center of mass, such that more mass would lie on one side (to wit, > in the "falling" direction) than the other. This would contradict that > point having been the center of mass. If I'm doing physics correctly > today, which is iffy on a good day. > > In your case you only need (x,y) coordinates of the center of mass, > because the projection simply removes z. Here is an example with > {h1,h2,h3} set to {1,2,3} respectively. > > pts = {{0, 0, h1}, {1/2, Sqrt[2]/2, h2}, {1, 0, h3}}; pts[[2,2]] should be Sqrt[3]/2. Fixing it does not change 'mass' or 'cmass'. Looks like it was just a transcription error, that the actual code was correct. > normal = Cross[pts[[1]] - pts[[2]], pts[[1]] - pts[[3]]]; > topplane = ({x, y, z} - pts[[1]]).normal >= 0; > > bounds = {z >= 0, y >= 0, y - Sqrt[3]*x <= 0, > y + Sqrt[3] (x - 1) <= 0, topplane}; > > reprule = Thread[{h1, h2, h3} -> {1, 2, 3}]; > > Can plot it like this. > > RegionPlot3D[ > And @@ bounds /. reprule, {x, 0, 1.1}, {y, 0, 1.5}, {z, 0, 3.5}, > PlotPoints -> 60] > > We compute the total mass (assuming uniform distribution of mass). > > In[63]:= mass = > Integrate[ > Boole[And @@ bounds] /. reprule, {x, 0, 1}, {y, 0, Sqrt[3]/2}, {z, > 0, 3}] > Out[63]= Sqrt[3]/2 > > Now find the {x,y} coordinates of the center of mass. > > In[66]:= cmass = > Integrate[{x, y}*Boole[And @@ bounds] /. reprule, {x, 0, 1}, {y, 0, > Sqrt[3]/2}, {z, 0, 3}]/mass > Out[66]= {13/24, 1/(2 Sqrt[3])} cmass = w.Most/@pts, with w = #/Tr@#&[{h1,h2,h3}+(h1+h2+h3)] ?? > > In[67]:= N[cmass] > Out[67]= {0.541667, 0.288675} > > Not a proof of correctness, but this seems like a plausible result. > > Daniel Lichtblau > Wolfram Research