3
$\begingroup$

I have seen quite a few problems like this one presented below. The idea is how to determine if it is possible to move a rectangular 3d box through the corner of a hallway knowing the dimensions of all the objects given.

Consider a hallway with width $1.5$ and height $2.5$ which has a corner of $90^\circ$. Determine if a rectangular box of dimensions $4.3\times 0.2\times 0.07$ can be taken on the hallway around the corner.

I know that intuitively, the principle behind this is similar to the 2 dimensional case (illustrated here), but how can I solve this rigorously?

  • 1
    This doesn't answer your question, but it's neat and relevant: [Moving sofa problem](http://en.wikipedia.org/wiki/Moving_sofa_problem).2011-07-15
  • 0
    Some of the references posted at the following web page may have what you're looking for: 2011-07-15
  • 0
    I don't think "the principle behind this is similar to the 2 dimensional case" (in the illustrated case the "box" is actually one-dimensinal). This is in fact a very difficult problem, but I'm sure such problems are of relevance, e.g., in robotics.2011-07-15
  • 0
    I believe some of the references at the URL I gave earlier deal with the 3-dimensional case, but if one is interested in the 2-dimensional case, try googling (together, but as separate words) "ladder", "corner", and "envelope".2011-07-15

1 Answers 1

4

Here is an attempt based on my experiences with furniture moving. The long dimension a=4.3 will surely be horizontal. One of the short dimensions, call it b will be vertical, the remaining dimension c will be horizontal. The box must be as "short" as possible during the passage at the corner. So, one end of the box will be lifted:

We calculate the projection L = x1 + x2 of the lifted box onto the horizontal plane. Now we move the shortened box around the corner. Here is an algorithm as a Python program (I hope it is readable):

# hallway dimensions:
height = 2.5   
width  = 1.5

def box(a, b, c): 
    # a = long dimension of the box = 4.3, horizontal
    # b = short dimension, 0.2 (or 0.07), vertical   
    # c = the other short dimension, horizontal

    d = math.sqrt(a*a + b*b)  # diagonal of a x b rectangle
    alpha = math.atan(b/a)    # angle of the diagonal in axb rectangle
    omega = math.asin(height/d) - alpha          # lifting angle 
    x1 = b * math.sin(omega)  # projection of b to the floor
    x2 = a * math.cos(omega)  # projection of a to the floor
    L = x1 + x2               # length of the lifted box projected to the floor
    sin45 = math.sin(math.pi/4.0)
    y1 = c * sin45           # projection of c to the y axis
    y2 = L / 2 * sin45       # projection of L/2 to the y axis
    w = y1 + y2              # box needs this width w 
    ok = (w <= width)        # box passes if its width w is less than the
                             # the available hallway width
    print "w =", w, ", pass =", ok
    return ok

def test():
    # 1) try 0.07 as vertical dimension:
    box(4.3, 0.07, 0.2) # prints w= 1.407,  pass= True 
    # 2) try 0.2 as vertical dimension:
    box(4.3, 0.2, 0.07) # prints w= 1.365,  pass= True

test()

So, the box can be transported around the corner either way (either 0.2 or 0.07 vertical).

Adding Latex formulae for the pure mathematician:

$$ \begin{align*} d= & \sqrt{a^{2}+b^{2}}\\ \alpha= & \arctan(b/a)\\ \omega= & \arcsin(height/d)-\alpha\\ L= & x_{1}+x_{2}=b\sin\omega+a\cos\omega\\ w= & y_{1}+y_{2}=\frac{c}{\sqrt{2}}+\frac{L}{2\sqrt{2}} \end{align*} $$

The box can be transported around the corner if $w \le width$.

  • 0
    Thank you. That was my intuition also.2011-07-16