On Apr 28, 2011, at 10:26 PM, Han-Wen Nienhuys wrote: > On Thu, Apr 28, 2011 at 12:37 PM, <mts...@gmail.com> wrote: >> Reviewers: , >> >> Message: >> If I understand it correctly, Han-Wen's original collision code in >> beam.cc was treating intervals as if is_empty checked if they were >> uninitialized or invalid in some way, whereas in fact, is_empty gets rid >> of anything where left is greater than right. However, the LEFT and >> RIGHT values of intervals in collision_free contain y values for the >> beam position, and thus, the left one will invariably be higher than the >> right one if the beam has a negative slope. Thus, is_empty was (I >> think) ruling out any solution with a negative slope. >> >> I'm not sure if this is too drastic to address issue 1613 (there may >> need to be some error checking fit in), but I think that it more or less >> fixes the problem. > > Please read the code carefully to see what it does, rather than guessing: > >> - Interval v = >> - (!collision_free[DOWN].is_empty()) ? >> - collision_free[DOWN] : >> - collision_free[UP]; >> - >> - beam_left_y = point_in_interval (v, 2.0); > > these are not beam slopes.
>From my reading of the code, collision_free[DOWN] and collision_free[UP] give >tenable left and right y positions for a potential beam. is_empty returns >true if the right entry of an interval is greater than the left entry. It >thus rejects any collision_free[DOWN] or [UP] where the left entry is greater >than the right entry (or, in other words, it rejects anything where the left >side is higher than the right side (negative slope)). I'm sorry that I'm not getting what it is, but this is the best I could do by mulling over it and using lots of printf's. If it's not doing this, could you please describe what it is doing? Cheers, MS _______________________________________________ lilypond-devel mailing list lilypond-devel@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-devel