How to achieve a nurbs quadball in rhino?

it’s path layout will be like this:

each surface will be 2 degree 3 CV count in both U and V direction (a 2 degree bezier surface),and the result should be a rational nurbs sphere.

a quickie attempt which resulted in a non-perfect spherical surface (zebra on the attached .3dm and you’ll see the glitch)… i’ll try it again later unless someone comes up with a better idea before i wake up…

quadball.3dm (546.8 KB)

i just drew a box then the red arc using the centerpoint of the box and its corners as endpoints… then drew the green arcs using the centerpoint of the box and the midpoints on the red arcs… then networkSrf on the arcs…
i’m sure there’s a better way but this came to mind first.

1 Like

tried the same thing again but this time i extruded the red arcs then used those surfaces for the networkSrf (so i had something to set to tangent instead of position only)… i think it came out perfect now though someone with more expertise in surface analysis than me may find an error in this:

quadball2.3dm (457.9 KB)

This is pretty close.Ball4.3dm (34.0 KB) I think I have the weights correct, anyway. The corners of each patch should be 1.0, the middles of the sides sqrt(2/3) and I think the middle should be sqrt(3)/3. I just guessed at the location of the middle control point of the patch by dragging once the weights were set, because I’m too tired to figure it out.

1 Like

hey @chuck… what are you running there? :smile:
i can’t open it. (maybe a mac thing though?)

Probably the Rhino 6 internal build of the day…


This is as close as I got… Kinda combined both Chuck and Jeff’s methods… Started with 4 arcs, made an EdgeSrf from them (which preserves the arc weights) and then adjusted weight/position of the center surface control point… This was done more or less by observation and I didn’t get any logical result as to mathematically determining the weight or location of that point, but then I’m not a mathematician by any stretch of the imagination… In mine the weight of the mid point is close to sqrt(2)/3, and its location close to a 60° included angle from the other two, but not exactly… My original thought was it should have been 90° and sqrt(2)/2 weight, but that was way off…

The Zebra from the joined patches looks good though…


NurbsQuadBall.3dm (781.1 KB)

Yeah, sorry. That was a v6 file. Here’s the v5 version. I still haven’t verified the correct weight or center control point. Ball4.3dm (35.1 KB)

If the end weights are 1.0, the mid weight on an arc is cos(a/2), where a is the angle of the arc. For the arc across the middle of this thing, the end weights are not 1.0, but sqrt(2/3). This should make the mid weight of the mid arc = sqrt(2/3)*sqrt(2)/2.

1 Like

OK, I see that cos(a/2) in this case is the same as sqrt(2/3) = 0.816497

My calculator says that sqrt(2/3)*sqrt(2)/2 = 0.577349 , but that doesn’t work for me (I tried that earlier on), the surface is not sufficiently spherical that way…

And I still don’t know how to determine where (exactly) in space the control point needs to be… other than “eyeballing it”…


That should be the weight on the mid cv of the middle isocurve arc. What I haven’t thought about, is whether that would also be the weight of the the surface cv. I also haven’t convinced myself that it is possible to get a perfect sphere this way, although it seems likely.

My “eyeballed” file is pretty close (within about .0001*R, could be tweaked closer), but I haven’t got any mathematical basis to reproduce it…


[quote=“chuck, post:11, topic:5244, full:true”] I also haven’t convinced myself that it is possible to get a perfect sphere this way, although it seems likely.

yeah, i can’t get a perfect sphere and my version is a weightier surface than the ones you guys are doing…

if i extract some of the isocurves then randomly measure to the cpoint, i’m still getting a slight variance… not sure if my tolerance settings have anything to do with it but i imagine so?

the only way i’ve been able to make a perfect sphere is to span an arc diagonally across a box then revolve it… then trim it with the red arcs shown in my original picture… but then there’s a seam in the surface… and it’s trimmed

Try this for the middle weight…

I was being foolish. If the side cvs have weight w, then the end weights of the middle isocurve would be (1+w)/2, and the middle weight of the middle isocurve would be wm = sqrt(2)/2*(1+w)/2. This means if b = middle surface cv weight, then (w+b)/2 = wm. Put this all together and we get the srf’s center weight is sqrt(2)/2*(sqrt(2/3)+1) - sqrt(2/3). If I did the arithmetic and algebra right, this is the only thing that could work.

Eyballing, I get an angle of 59.8, so you are probably right that 60 is correct.

Hi Jeff,

Yes, I think the tolerance is what you are seeing. Generally when you want to get a sphere, it is best to avoid anything that involves tolerance. By adding patches you can get arbitrarily close, but without going to the limit (infinitely many patches) you can never get there, unless you start with an exact mathematical solution.

right, but the software should be handling that aspect for me, right? :wink:

i don’t know, i’ll be surprised if anybody can mathematically figure out where to place control points and arrive at a solution which is closer than the one i’ve put up…

(that said, i’m not even sure if my solution fits the original criteria of "2 degree 3 CV count in both U and V direction (a 2 degree bezier surface),and the result should be a rational nurbs sphere."
as in-- does the 3 CV include the surface edges as 2 of the 3?

Empirically in my file I arrived at 0.467991, so I was pretty close…!

I would really like it to be a round number like that, but what I get is more like 59.846 - 60.000 does not work…

Unfortunately, as Jeff also saw, the sections through the patch are not perfect and will not simplify to arcs within the file tolerance… I don’t know if you can get closer, it seems this will always be an “approximate” solution.


From properties:
Surface NURBS Surface (rational) "U": degree =2 CV count = 3 (0.000 <= U <= 106.604) "V": degree =2 CV count = 3 (0.000 <= V <= 106.604)

I just noticed that the Weight command only uses 5 significant digits. Maybe that’s where the error comes from. I have to leave this alone for now, but I’ll look again when I have a chance. I know how to determine the exact solution if there is one. Now that the weights are determined, there is a formula for the necessary location of the cv. If that location doesn’t give a sphere, then we can just come close.


Well, thanks for "weighing in"on this Chuck, interesting excercise !