IMPORTANT: Please do not post solutions, hints, or other spoilers until at least 60 hours after the date of this message. Thanks. IMPORTANTE: Por favor, no enviéis soluciones, pistas, o cualquier otra cosa que pueda echar a perder la resolución del problema hasta que hayan pasado por lo menos 60 horas desde el envío de este mensaje. Gracias. BELANGRIJK: Stuur aub geen oplossingen, hints of andere tips in de eerste 60 uur na het verzendingstijdstip van dit bericht. Waarvoor dank. UWAGA: Prosimy nie publikowac rozwiazan, dodatkowych badz pomocniczych informacjii przez co najmniej 60 godzin od daty tej wiadomosci. Dziekuje. ---------------------------------------------------------------- You will write a program that simulates a two-dimensional roller coaster. A 2-D roller coaster track is given by stdin as a sequence of scaled line segments: ... 153.167706326906 170.818594853651 152.705297542038 170.778692088403 152.230255082701 170.621111633323 151.772089241241 170.340303566736 ... All numbers are positive floats. The first coordinate (x) is between 0 and 600, and the second coordinate (y) is between 0 and 400. In principle each 10 in the input file means 1 meter, so the roller coasters described have a maximum height of 40 meters, but feel free to play with the scale. There are three examples here: http://perl.plover.com/qotw/misc/e026/quad.rc http://perl.plover.com/qotw/misc/e026/loops.rc http://perl.plover.com/qotw/misc/e026/huricane.rc Write a Tk application that draws the track in a Tk::Canvas and simulates the run of a car of mass m left to the effect of gravity at the start. We assume there's no friction. The run ends either when some extreme of the track is reached, or the car is stopped in a balanced position. A track may make the car to go backwards at some point. For instance, a possible solution would run loops.rc more or less like this: http://perl.plover.com/qotw/misc/e026/loops.mov Since physics is not the topic of QOTW here's a summary of an approach to the problem in case you don't want to work that part out yourself. Let's suppose that the car starts motionless at (50, 60) and slides down a slope to (20, 20). Its potential energy at the top is m*g*60, where m is the mass of the car, and g is a constant that represents the force of gravity. At the bottom, the potential energy is only m*g*20. The law of conservation of energy says that the extra m*g*40 has to go somewhere, and in fact it has turned into kinetic energy, which is the energy of the speed of the car. Physics says that the kinetic energy (k) of the car is m* v**2 / 2, where m is the mass of the car and v is the velocity. So we have m*g*20 = m*v**2/2, so v = sqrt(40g) at the bottom. The average velocity over the entire slope is half this, or sqrt(10g). Since the length of the slope is 50 units, the car takes 50/sqrt(10g) time units to slide down the slope. How fast it actually slides depends on g, the force of gravity; if g is large it will slide faster, and if g is zero there is no gravity, so it won't slide down at all; it will stay at the top forever. The gravity constant g can be built into your program or supplied via a command-line option. In summary: p = m*g*y k = m*(v**2)/2 p = k v(average) = (v(start) + v(end))/2; t * v(average) = l y = height above the ground at a particular time p = potential energy at that time m = mass of the car g = gravity constant k = kinetic energy at a particular time v = velocity of the car at that time v(start) = velocity of the car at the start of a segment of track v(end) = velocity of the car at the end of the segment v(average) = average velocity of the car over the segment l = length of the segment t = time to traverse the segment To get a more accurate simulation, your program can divide each straight segment of track into several smaller straight segments and simulate each one separately.