No prob David...thanks for the knot vector explaination, which is
something I haven't wrapped my head around yet.

To all of you who are interested in what's actually happening behind
the scenes, here's a paper that Bob had posted something a while
back.  The paper itself is old, but gives a good run through of NURBS
without making your head exploded.  There are some good diagrams and
not to much crazy math notation.

http://devworld.apple.com/dev/techsupport/develop/issue25/schneider.html

-Damien

On Jan 16, 7:58 am, Chris Wilkins <[email protected]> wrote:
> Wow. I love it when the solutions get smaller and smaller with each
> post. Simplicity is best.
>
> Thank you all for your in depth explanations. I'm very interested in
> understanding these internal concepts. Do you guys have any
> recommended resources for further learning about nurbs mathematics
> (books, sites, etc)?
>
> -Chris
>
> On Jan 16, 5:22 am, visose <[email protected]> wrote:
>
> > Very informative. I like to think of the curve parameter as similar to
> > the uv coordinates of a nurb surface. A common mistake is trying to
> > space out geometrically over a surface using uv subdivisions. It's
> > basically the same error than using the cuve parameter instead of
> > length, but in a non planar nurb surface its much more difficult to
> > find a real length between two points. What i have done in the past is
> > project a curve onto the surface and use the length component, I don't
> > know if there are better solutions.
>
> > On Jan 16, 10:50 am, David Rutten <[email protected]> wrote:
>
> > > Thanks Damien,
>
> > > you saved me a lot of trouble explaining about curve domains :)
>
> > > There's one thing I'd like to add to those who want to know more about
> > > nurbs mathematics. This is not required knowledge even for Plugin
> > > programmers. So if you skip this, you'll be no worse off:
>
> > > The domain of a curve is an emergent property of the knot-vector. I
> > > always hated the word "knot-vector", because it conjures up images
> > > that have nothing to do with what it's supposed to describe. Every
> > > nurbs curve is defined by 3 things:
>
> > > 1) the control point position + weights
> > > 2) the degree of the curve
> > > 3) the knot-vector
>
> > > The control points are 4D points (3d points if you omit weighting
> > > factors).
> > > The degree is a single integer number between 1 and infinity (or 1 and
> > > 11 in the case of Rhino).
> > > And the knot-vector is a list of floating point numbers that controls
> > > the area of influence of individual control points. (it's a bit more
> > > complicated than that, but this is only a flying survey)
>
> > > The thing to realise about the knot vector is that the only thing that
> > > matters are the relative ratios of the subsequent numbers. Hence, a
> > > curve with the knot vector:
>
> > > {0, 0, 0, 1, 2, 3, 3, 3}
>
> > > will look exactly the same as a curve with the same degree and control
> > > points but with the knot vector:
>
> > > {10, 10, 10, 11, 12, 13, 13, 13}
>
> > > and exactly the same as a curve with the knot vector:
>
> > > {0, 0, 0, 2, 4, 6, 6, 6}
>
> > > The celebrated domain of the curve is nothing more than the numeric
> > > interval between the first and the last number in the knot-vector. We
> > > can fit the knot-vector into any non-zero domain we wish, because we
> > > can easily scale and offset all the knots so that their relative
> > > ratios remain unmolested.
>
> > > If you want a hands on example, create a curve in Rhino (degree=3, 5
> > > control points, don't make it closed), and use the _List command to
> > > sneak a peek at the knot-vector. Then use the _Reparameterize command
> > > to change the domain and use _List again to see what's changed in the
> > > knot-vector.
>
> > > --
> > > David Rutten
> > > [email protected]
> > > Robert McNeel & Associates
>
> > > On Jan 16, 5:35 am, damien_alomar <[email protected]> wrote:
>
> > > > Evaluating the curve in more of a geometric matter just requires
> > > > switching out the Evaluate Curve for the Evaluate Length component
> > > > (forgot about that one), and disconnecting the curve domain from the
> > > > random component....the Evaluate length component will default to
> > > > evaluating the curve between 0 and 1, so the standard output of the
> > > > random component is fine
>
> > > >http://grasshopper3d.googlegroups.com/web/rndCrvDivLen.jpg?hl=en&gsc=...
>
> > > > -Damien
>
> > > > On Jan 15, 11:26 pm, damien_alomar <[email protected]> wrote:
>
> > > > > Domains are equivalent to the mathematical "length" of the curve.
> > > > > There's a start parameter and an end parameter value and any values in
> > > > > between those two can be solved through the mathematical equations and
> > > > > the control points that dictate the final shape of the curve.  The
> > > > > three key things to understand are that the domain does not really
> > > > > relate to the length of the curve at all (although by default when
> > > > > Rhino creates curves it does its best to try and match the domain to
> > > > > the length), the domain of the curve can be reexpressed (ie changed
> > > > > from 0 to 1), and lastly that evenly spaced values in parametric space
> > > > > will not be evenly placed in terms of distance along the curve.
>
> > > > > So far the suggested solutions are really over complicating this
> > > > > problem.  Right now you guys aren't using the random component as its
> > > > > intended and are thinking of crazy ways to get around it.  Random
> > > > > number generators will only generate numbers from 0 to 1, so if you
> > > > > look at the R node you'll find that the random component can except a
> > > > > range and defaults to that 0 to 1 range.  Ideally we want to use the
> > > > > domain of our curve to set the range of our random number set.  There
> > > > > use to be an explicit Curve Domain component in grasshopper, but it
> > > > > was taken out because David has added the implicit conversions almost
> > > > > everywhere in GH.  An implicit conversion is simple the concept that I
> > > > > can feed one data type (a curve for instance) into another data type
> > > > > (a range/domain for instance) and that data type is able to be
> > > > > extracted from another, the it will do so automatically.  Because of
> > > > > this, we can just feed our curve directly into the R node and we'll
> > > > > get the domain that is need...no dotNet scripts. After that just feed
> > > > > that to the Curve Parameter component and you're on your way.
>
> > > > >http://grasshopper3d.googlegroups.com/web/rndCrvDiv.jpg?hl=en&gsc=Ql9...
>
> > > > > The only thing about this solution is that you'll get a higher
> > > > > concentration of points, geometrically speaking, where the parametric
> > > > > space of the curve is more compressed.  This kind of makes the
> > > > > randomness jaded, but probably doesn't matter that much.  I'll see if
> > > > > there's a way to randomly divide the curve more based on geometric
> > > > > space than parametric.
>
> > > > > HTH,
> > > > > Damien
>
> > > > > On Jan 15, 8:31 pm, visose <[email protected]> wrote:
>
> > > > > > I'll leave that to David. He's a man of much more knowledge. He will
> > > > > > probably have to end up correcting me any way.
> > > > > > :P
>
> > > > > > On Jan 16, 1:42 am, Chris Wilkins <[email protected]> wrote:
>
> > > > > > > Visose,
>
> > > > > > > That worked. You are a man of much knowledge.
>
> > > > > > > Can you explain the "reparameterize" and the "domain" of the 
> > > > > > > curves
> > > > > > > any further?
>
> > > > > > > Thanks much,
> > > > > > > Chris
>
> > > > > > > On Jan 15, 7:29 pm, visose <[email protected]> wrote:
>
> > > > > > > > Right-click on the curve component and check 'reparametrize'. It
> > > > > > > > should normalize the domain range from 0 to 1.
>
> > > > > > > > On Jan 16, 1:22 am, Chris Wilkins <[email protected]> 
> > > > > > > > wrote:
>
> > > > > > > > > Baldino,
>
> > > > > > > > > I tried building your solution (since I hadn't used the Random
> > > > > > > > > component yet), and found a problem when there are more than 
> > > > > > > > > 3 control
> > > > > > > > > points on the curve. I found that the domain of the curve 
> > > > > > > > > rises when
> > > > > > > > > more control points are there, and the Evaluate Point on Curve
> > > > > > > > > component would only divide a portion of the curves. Here's a 
> > > > > > > > > pic of
> > > > > > > > > that:
>
> > > > > > > > >http://groups.google.com/group/grasshopper3d/web/RandomDivideVB1.jpg
> > > > > > > > > (I crossreferenced the input in the last component to show 
> > > > > > > > > the five
> > > > > > > > > curves with same random values)
>
> > > > > > > > > The domains are listed under each curve and you can see how 
> > > > > > > > > the
> > > > > > > > > affected portion is shorter when the domain rises over 1.
>
> > > > > > > > > I couldn't find a GH component that output the number of 
> > > > > > > > > control
> > > > > > > > > points, so I tried out the VB component (finally). I got the 
> > > > > > > > > domain of
> > > > > > > > > the curve that way and multiplied the random numbers by the 
> > > > > > > > > domain to
> > > > > > > > > divide the whole length of the curve. Here's the two 
> > > > > > > > > additional
> > > > > > > > > components:
>
> > > > > > > > >http://groups.google.com/group/grasshopper3d/web/RandomDivideVB2.jpg
> > > > > > > > > (I could only make it do one curve at a time without more 
> > > > > > > > > thought).
>
> > > > > > > > > Chris
>
> > > > > > > > > PS. I have no idea if changing the degree of the curve will 
> > > > > > > > > mess this
> > > > > > > > > solution up. I had no idea what "domain" of curve was before 
> > > > > > > > > this.
>
> > > > > > > > > On Jan 15, 12:37 pm, baldino <[email protected]> wrote:
>
> > > > > > > > > > this will 
> > > > > > > > > > work:http://groups.google.com/group/grasshopper3d/web/divide_crv_randomlen...
>
> > > > > > > > > > On Jan 15, 6:15 pm, Alvin <[email protected]> wrote:
>
> > > > > > > > > > > Hi,
>
> > > > > > > > > > > I'm just getting into Grasshopper and need some initial 
> > > > > > > > > > > help.
>
> > > > > > > > > > > I would like to divide a curve into a certain # of 
> > > > > > > > > > > segments, with each
> > > > > > > > > > > segment being a random length.  I cant see how to any of 
> > > > > > > > > > > the functions
> > > > > > > > > > > in the curve>division section of grasshopper can do this. 
> > > > > > > > > > >  Little help
> > > > > > > > > > > please?
>
> > > > > > > > > > > thanks much,
>
> > > > > > > > > > > Alvin- Hide quoted text -
>
> > > > > > > > > > - Show quoted text -- Hide quoted text -
>
> > > > > > > > - Show quoted text -- Hide quoted text -
>
> > > > - Show quoted text -- Hide quoted text -
>
> > - Show quoted text -

Reply via email to