I am trying to create NURBS surface that perfectly fits one face of a Quadrilateralized Spherical Cube (QSC) [also called a Cobb sphere in some contexts, I believe]. I have seen some visualizations of what I'm looking for, but haven't found a good process to determine the control point locations and weights.
Here's one example of what I want: two NURBS sphere tiles with control points visible. This is adapted from a paper* that seems to be focused on fluid mechanics, and I don't need to be anywhere near that level of detail. And I can't determine from the paper the exact weights used, or if it satisfies my other constraints. Another, maybe clearer example of what I want the surface to look like: Ideal QSC Tile Views
The constraints I'd like to meet (if possible):
- Control point grids in arbitrary sizes, while still perfectly fitting this surface. 5x5, 6x6, 11x11, etc... at least up to a certain point where we'd lose the benefit of NURBS's simplicity and elegance.
- Preferably degree 3, but I understand degree 2 might be better suited.
- Rational NURBS (differing weights are probably required to achieve perfect curvature).
- Uniform knot vectors (edge control points appear to extend past the surface itself).
More background: I would ultimately like to do this in Python. I already have a set of functions to evaluate and plot a NURBS surface given the control points, weights, knot vectors, and degrees. My end goal is to generate NURBS models in many shapes, and I believe a tiled sphere such as the QSC is a perfect building block, although I've seen icosahedral and "rhombic dodecahedral" sphere tilings which are also interesting (but appear to use non-uniform knot vectors).
Research and what I've tried already:
- I understand that there is no unique solution (AFAIK), so I would probably need to settle on a scheme to pre-define the control point locations based on corresponding u, v coordinates, then determine weights. It seems like the 2D equivalent, arcs and circles, can be defined with control points arranged along a square or triangle (with differing weights), but I don't know how this simple scheme would translate to 3D, or if that's even a possibility.
- I have tried using the geomdl AKA NURBS-Python library, however it is not working as I expected, and even if I could get geomdl to work, I would just like a more direct view and intuitive understanding of this geometry/topology myself.
- I have looked through Piegl's "NURBS Book" but I cannot find exactly what I am looking for.
- I tried writing out the NURBS surface general form and setting it equal to the above equations, but the recursive nature of the B-spline basis functions is preventing me from getting an analytical solution (maybe there's a way around this, however?).
- I've seen people use least squares algorithms for NURBS fitting, mainly with more complex surfaces and point clouds. I'm not sure a LS result would give me a perfect fit outside of the selected test points on the surface, plus I feel that there's a more direct solution out there.
I'd appreciate any help people could provide, or perhaps new ways of looking at the problem. Thank you.
*[Harmel, Maximilian & Sauer, Roger. (2022). New hybrid quadrature schemes for weakly singular kernels applied to isogeometric boundary elements for 3D Stokes flow. 10.48550/arXiv.2210.08507]
A bit late, I know, but maybe this is what you want.
Tiling the sphere with rational Bézier patches
James E. Cobb
University of Utah, 1988.
https://collections.lib.utah.edu/dl_files/4e/77/4e7746dd53c79f8557272b92b47d2d407da4931a.pdf
Table 4 on page 11 gives you control points and weights for a patch representing one-sixth of a sphere.