The Racetrack Playa is a scenic dry lake that is located above the northwestern side of Death Valley, in Death Valley National Park, California, U.S.. The playa is exceptionally flat and level, elevates 1132 m above sea level, with the northern end being only 4 cm higher than the southern end. During periods of heavy rain, water washes down from the Racetrack mountain area draining into the playa, forming a shallow, short-lived endorheic lake. Under the desert sun, the thin veneer of water quickly evaporates, leaving behind a surface layer of soft slick mud. As the mud dries, it shrinks and cracks into a mosaic pattern of interlocking polygons.
The lake is famous for a mysterious geological phenomenon of "sailing stones" that move and inscribe long tracks along the smooth valley floor without human or animal intervention. Stones with rough bottoms leave straight striated tracks, while those with smooth bottoms tend to wander. Stones sometimes turn over, exposing another edge to the ground and leaving a different track in the stone's wake. Trails differ in both direction and length. Rocks that start next to each other may travel parallel for a time, before one abruptly changes direction to the left, right, or even back to the direction from which it came. Trail length also varies – two similarly sized and shaped rocks may travel uniformly, then one could move ahead or stop in its track.
The phenomenon of rock motion has excited considerable interest, and there is scientific and popular literature extending back to the first report in 1948. Initial studies showed that the boulders move once every two or three years and that their traces usually remain visible for three to four years. Over time, many theories and hypotheses about the movement mechanism have been put forward. Rock movement has been variously attributed to high winds (over 145 kilometers per hour), liquid water, ice or ice flotation, but no one had observed the rock motion in action.
During the 2013-2014 winter, geologists from the Scripps Institute of Oceanography1 finally succeeded to observe rock movements using GPS and time-lapse photography2. The research team witnessed and documented rock movement on December 20, 2013, that involved more than 60 rocks, with some rocks moving up to 224 m between December 2013 and January 2014 in multiple move events. These observations contradicted earlier hypotheses of winds or thick ice floating rocks off the surface. Instead, rocks move when large ice sheets a few millimeters thick floating in an ephemeral winter pond start to break up during sunny days. These thin floating ice panels, frozen during cold winter nights, are driven by light winds and shove rocks at up to 5 m/min (0.3 km/h). Some GPS-measured moves lasted up to 16 minutes, and a number of stones moved more than five times during the existence of the playa pond in the winter of 2013-14. How massive boulders of hundreds of kilograms move and why some trails are missing rocks at the end of the track remains a mystery.
We represent rocks as cuboid objects. A block always rests on the horizontal base (XY-plane) of a three-dimensional space with a fixed coordinate system as indicated in the figure below. The block is always viewed from a position along the positive X-axis in the direction of the YZ-plane. The front face of the block is always parallel with the YZ-plane. The dimensions of the object are described by its width $$W$$ (measured along the X-axis), length $$L$$ (measured along the Y-axis) and height $$H$$ (measures along the Z-axis). The position of the object is described by the position of the corner point $$(x, y)$$ at the bottom left of the front face of the object, as indicated by a black dot in the figure below, where $$x, y \in \mathbb{Z}$$.
The surface area $$A$$ of the block is given by: \[A = 2(L\cdot W + L\cdot H + H\cdot W)\] The volume $$V$$ is given by: \[V = L\cdot H\cdot B\] The length of the space diagonal $$d$$ is given by: \[d = \sqrt{L^2 + H^2 + W^2}\] There are two ways the block can move: slide or tilt. The block may slide over its entire length to the left or to the right, or it may slide forward or backward over its entire width. This is illustrated in the figures below.
The block may also tilt to the left, to the right, forward or backward. This is illustrated in the figures below.
Write a class Block that represents blocks having dimensions and a position as described above, who can move in the two given ways. This class should support at least the following methods:
An initialization method __init__ having three parameters length, height, width that take integer values (int) that respectively represent the length, the height and the width of the block. The initialization method also has an optional fourth parameter position that takes a sequence (list or tuple) containing two integers (int) that indicates the position of the corner point at the bottom left of the front face. In case no value is passed explicitly to the position, this corner point it located in the origin $$(0, 0)$$ of the base plane.
A method area (without arguments) that returns the surface area (float) of the block.
A method volume (without arguments) that returns the volume (float) of the block.
A method diagonal (without arguments) that returns the length (float) of the space diagonal of the block.
A method __repr__ (without arguments) that returns a string representation (str) of the current dimensions and position of the block. This string must read as a Python expression that creates a new object of the class Block that has the same dimensions and position as the current dimensions and position of the block on which the method is called. The position must always be represented as a tuple containing two integers (int). Derive the correct formatting of the string representation from the examples given below.
A method slide that takes a string argument (str) containing a single letter. This letter indicates the direction in which the method should slide the block: to the left (L), to the right (R), forward (F) or backward (B). The method must return a reference to the object (Block) on which the method was called, such that method calls can be chained. In case no uppercase letter was passed to the method that corresponds to one of the four directions, the method must raise an AssertionError with the message invalid direction.
A method tilt that takes a string argument (str) containing a single letter. This letter indicates the direction in which the method should tilt the block: to the left (L), to the right (R), forward (F) or backward (B). The method must return a reference to the object (Block) on which the method was called, such that method calls can be chained. In case no uppercase letter was passed to the method that corresponds to one of the four directions, the method must raise an AssertionError with the message invalid direction.
A method sail that takes a string argument (str) with an even length. The characters of this string must alternate between letters that indicate a type of movement (S for slide and T for tilt) and letters that indicate a direction (L for left, R for right, F for forward and B for backward). For example SB means slide backward, TR means tilt to the right, and SBTR means first slide backward and then tilt to the right. The method must execute the described movements one after the other and return a reference to the object (Block) on which the method was called, such that method calls can be chained. In case the given string contains a character at an even position that is no uppercase letter representing one of the two types of movement, the method must raise an AssertionError with the message invalid movement. In case the given string contains a character at an odd position that is no uppercase letter representing one of the four directions, the method must raise an AssertionError with the message invalid direction.
>>> rock = Block(5, 2, 3) >>> rock Block(length=5, height=2, width=3, position=(0, 0)) >>> rock.area() 62.0 >>> rock.volume() 30.0 >>> rock.diagonal() 6.164414002968976 >>> rock2 = rock.slide('R') >>> rock2 Block(length=5, height=2, width=3, position=(0, 5)) >>> rock is rock2 True >>> rock.slide('F') Block(length=5, height=2, width=3, position=(3, 5)) >>> rock.tilt('L') Block(length=2, height=5, width=3, position=(3, 3)) >>> rock.tilt('B') Block(length=2, height=3, width=5, position=(0, 3)) >>> rock.tilt('B').slide('L').tilt('L').slide('B') Block(length=5, height=2, width=3, position=(-8, -4)) >>> rock.sail('SB') Block(length=5, height=2, width=3, position=(-11, -4)) >>> rock.sail('TR') Block(length=2, height=5, width=3, position=(-11, 1)) >>> rock.sail('SFSFTLSLTBTBSRSFTRTFTRTRSBSF') Block(length=2, height=3, width=5, position=(-2, 6)) >>> rock.tilt('X') Traceback (most recent call last): AssertionError: invalid direction >>> rock.sail('XY') Traceback (most recent call last): AssertionError: invalid movement >>> rock.sail('TY') Traceback (most recent call last): AssertionError: invalid direction
Something significant happened on February 29, 1912 in Tandil, Argentina. A 300-ton stone that had perched impossibly on the edge of a local hill suddenly tumbled to the bottom and broke into pieces. Whether this happened due to vandalism or to blasting at a local quarry is unknown — there were no witnesses.
In 2007 the town replaced it with an exact replica. To date, it's still there.
Norris RD, Norris JM, Lorenz RD, Ray J, Jackson B (2014). Sliding rocks on Racetrack Playa, Death Valley National Park: first observation of rocks in motion. PloS one 9(8), e105948. 3
Lorenz RD, Jackson BK, Barnes JW, Spitale J, Keller JM (2011). Ice rafts not sails: Floating the rocks at Racetrack Playa. American Journal of Physics 79(1), 37-42. 4