[vtk-developers] Class design for spline visualizations

Lin M majcjc at gmail.com
Tue Jun 30 12:12:36 EDT 2015


Hi Dr. Thompson,

I have finished the conversion from NURBS patch to Bezier patch and generation
of surface meshes.

Now we can load some real nurbs shapes to test. :-)

Best,
Lin

On Mon, Jun 29, 2015 at 3:22 PM, Lin M <majcjc at gmail.com> wrote:

> Hi Dr. Thompson,
>
> I just learnt the polar form about b-spline (
> http://web.archive.org/web/20120227050519/http://tom.cs.byu.edu/~455/bs.pdf)
> which gives a more intuitive explanation for knot insertion.
>
> As the example you mentioned before, given a knot vector {0,1,2,3} for a
> 2-degree curve, we will have 3 control points P_0, P_1, P_2. They can be
> represented in polar form as P(0,1), P(1,2) and P(2,3).
> The control points for the bezier segments for this curve is
> Segment 1: P(0,0), P(0,1), P(1,1)
> Segment 2: P(1,1), P(1,2), P(2,2)
> Segment 3: P(2,2), P(2,3), P(3,3)
>
> What we need to generate is P(0,0), P(1,1), P(2,2) and P(3,3). From
> the affine combination property, we can get:
> P(1,1) by interpolating P(0,1) and P(1,2)
> P(2,2) by interpolating P(1,2) and P(2,3)
>
> for P(0,0) and P(3,3), it seems not that straightforward. It's possible to
> generate P(0,2) first by interpolation P(1,2) and P(2,3) and generate
> P(0,0) by interpolation P(0,1) and P(0,2). For P(3,3), first generate
> P(1,3) by interpolation P(0,1) and P(1,2) and then generate P(3,3) by
> interpolation P(1,3) and P(2,3).
>
> Best,
> Lin
>
>
> On Fri, Jun 26, 2015 at 6:09 PM, Lin M <majcjc at gmail.com> wrote:
>
>> What confuses me a lot is the different definition of the knot vector. As
>> in the wiki page "Some modelers that use older algorithms for NURBS
>> evaluation require two extra knot values for a total of (degree+N+1)
>> knots". But how can I get 3 2-degree B-spline basis functions N_{0,2},
>> N_{1,2} and N_{2,2} from the knot vector {0,1,2,3}? From the knot vector
>> {0,1,2,3}, we can get at most 3 zero-degree B-spline basis functions
>> N_{0,0}, N_{1,0} and N_{2,0} and then we can only get one 2-degree basis
>> function N_{0,2}.
>>
>> The reason why I said the algorithm from the NURBS book would fail is
>> because it use a loop variable start from kSpan - sMult (kSpan is the id of
>> the knot span where the insert knot is, and sMult is the current
>> multiplicity of the insert knot). For the knot vector {0,1,2,3}, if we
>> insert a new knot 0, the kSpan = 0, sMult = 1 and kSpan - sMult = -1 which
>> is not correct.
>>
>> On Fri, Jun 26, 2015 at 4:41 PM, David Thompson <
>> david.thompson at kitware.com> wrote:
>>
>>> Hi Lin,
>>>
>>> Knot insertion should not fail when a knot is not repeated. Instead, by
>>> inserting the same knot value multiple times we can convert the control
>>> polygon to a series of Bézier patches. If you start with a knot vector of
>>> {0,1,2,3} for a degree 2 curve, then you can insert knots until the knot
>>> vector is {0,0,0,1,1,1,2,3}. The resulting control points for the knot
>>> interval [0,1] are a valid Bézier control polygon. You can do the same for
>>> other knot values to extract Bézier patches for the intervals [1,2] and
>>> [2,3].
>>>
>>>         David
>>>
>>>
>>> > On Jun 26, 2015, at 4:08 PM, Lin M <majcjc at gmail.com> wrote:
>>> >
>>> > Hi Dr. Thompson,
>>> >
>>> > I have a question about the knot vector and the knot insertion.
>>> > Currently the method for knot insertion is based on the algorithm from
>>> the NURBS book where it always assumes that the first value and last value
>>> in the knot vector repeat p+1 times. This makes the endpoints of the curve
>>> always coincide with the first and last control points. As you mentioned
>>> before, the knot vector may not always be like this and in such cases the
>>> algorithm will fail. Is there any method to deal with this?
>>> >
>>> > Best,
>>> > Lin
>>> >
>>> > On Fri, Jun 26, 2015 at 1:06 AM, Lin M <majcjc at gmail.com> wrote:
>>> > Hi Dr. Thompson,
>>> >
>>> > I have added a method in vtkPatchInterpolation to generate triangle
>>> strips for surfaces. I tested a cylindrical surface patch from the NURBS
>>> book and I think it's correct.
>>> >
>>> > Best,
>>> > Lin
>>> >
>>> > On Thu, Jun 25, 2015 at 7:32 PM, David Thompson <
>>> david.thompson at kitware.com> wrote:
>>> > Hi Lin,
>>> >
>>> > > Your last message is quite informative. I think it is mainly to
>>> implement a method in vtkPatchInterpolation which takes in a bezier patch,
>>> number of samples and ...
>>> >
>>> >
>>> > That would be a great start. Eventually it would be nice to have
>>> curvature-adapted surfaces, but just accepting a number of samples along
>>> each axis will be something we need in any event.
>>> >
>>> > > ... return a vtkUnstructuredGrid?
>>> >
>>> > I would accept a vtkUnstructuredGrid pointer as input and insert into
>>> it so that it is easy to create one grid with triangles from multiple
>>> patches.
>>> >
>>> >         David
>>> >
>>> >
>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtk-developers/attachments/20150630/d151b2f1/attachment.html>


More information about the vtk-developers mailing list