[vtk-developers] Class design for spline visualizations

Lin M majcjc at gmail.com
Mon Jun 29 15:22:01 EDT 2015


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/20150629/99d96828/attachment.html>


More information about the vtk-developers mailing list