[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Does better polynomial calculations for avoid objects. (issue 486004
Re: Does better polynomial calculations for avoid objects. (issue 4860042)
Thu, 25 Aug 2011 09:03:07 -0700
On Tue, Aug 23, 2011 at 12:36 AM, Mike Solomon <address@hidden> wrote:
> On Aug 23, 2011, at 6:55 AM, address@hidden wrote:
>> File lily/bezier.cc (right):
>> lily/bezier.cc:239: return p.minmax (sol[LEFT], sol[RIGHT], d !=
>> On 2011/08/19 07:03:50, MikeSol wrote:
>>> On 2011/08/18 21:36:45, joeneeman wrote:
>>> > If there are multiple intersections with (say) r, then
>>> > seem to return them in any useful order. So sol[RIGHT] is really
>> just an
>>> > arbitrary solution, isn't it?
>>> True, but this seems no worse than line 81 where ts is returned.
>> Not that
>>> this is a good excuse...
>> Right, but what really bothers me is that you're then using
>> sol[RIGHT] as though it means something. So what this function seems
>> to do (suppose ax=X_AXIS) is to take an arbitrary point where the curve
>> intersects x=r and an arbitrary point where the curve intersects x=l and
>> then finds the maximum y value of the curve between those two points.
> A well-formed slur should never retrograde along the X-axis, and thus, the
> size of sol[LEFT] and sol[RIGHT] should be 1 after filtering out all values
> less than 0 and greater than 1.
> I think that the programming errors in the current patch should do the trick.
Is it so difficult to just make the solution general? Assuming axis is
Y_AXIS and d is UP, the maximum must appear either at a critical point
of the y-axis polynomial or when the x-axis polynomial is equal to
either l or r. You can filter the critical points to make sure the x
coordinate is within the correct interval, and then filter everything
to make sure that the parameter is between 0 and 1. You'll have no
more than 8 points left and you take the one with the largest Y
I realize that it's unlikely to trigger, at least in the way that
Lilypond currently uses this code, but I do feel that code in a file
called bezier.cc should work for bezier curves in general.