I'm trying to figure out the best way to model the sphere-spiral here:
Is it possible to make this shape directly? Or do you have to make it as a cylinder and wrap it to a sphere?
Ok... I can't help putting out the laziest of the answers...
Enable the Add Curve: Extra Objects plugin.
Then do Add->Curve->Spirals
Select spiral type number 3 (spheric), and give it the parameters you want for radius, turns, etc:
The easiest way to model this is to shrinkwrap a strip of vertices to a sphere and then put a skin modifier on it.
I would recommend starting out with two verts, one at the origin and the other about twenty units up the x-axis and about two units up the z-axis. Once you have the verts in place, subdivide it with about 400 cuts and add a simple deform modifier. Switch the modifier to Bend mode and jack the angle way up to around 2560. This will give you a corkscrew shape.
Try to get it looking something like this. If you didn't quite get it right, you can set the transform pivot from Median Point to 3D Cursor in the bottom bar. Then, you can scale along the Z axis to make the corkscrew shape taller, or along the X axis to make it skinnier/fatter.
Then, make a new UV sphere subdivided a couple more times from the default and fit it inside the corkscrew shape you got, and add a Shrinkwrap modifier to the corkscrew. Set the mode to Nearest Surface Point (you can't use Project because there aren't any faces.)
At this point you will probably want to apply the simple deform modifier, go into edit mode, set the pivot to the 3d cursor, put the cursor on the bottom of the sphere, turn proportional editing on in Connected mode, set the falloff to sharp, and scale down the vertex on the bottom locking the Z axis. Do the same for the vertex on the top to get the shape kind of close to the sphere shape. (I recommend having the shrinkwrap modifier display on the edit cage to make this easier to see.)
Once you've done that, add the skin modifier, check Smooth Shading, and scale down the skin radius with CtrlA. Put a subdivision surface modifier on that and you've got your weird corkscrew sphere thing. Here's mine:
Here is a script to produce a Spherical Spiral Loxodrome , from it's parametric equations
import bpy
from mathutils import Vector
from math import radians, sin, cos, tan, sqrt, floor
context = bpy.context
def loxodrome_points(spirals, revs, angle_step=10):
a = 1 / spirals
degs = floor(360 * revs / 2)
segs = [radians(d) for d in range(-degs, degs, angle_step)]
points = []
for t in segs:
den = sqrt(1 + a * a * t * t)
x = cos(t) / den
y = sin(t) / den
z = - a * t / den
l = Vector((x, y, z))
points.append(l)
return points
points = loxodrome_points(10, 10)
#loxodrome = bpy.data.objects.get("Loxodrome")
#if loxodrome is None:
if True:
loxocurve = bpy.data.curves.new("loxo", 'CURVE')
loxocurve.dimensions = '3D'
loxocurve.resolution_u = 2
spline = loxocurve.splines.new('NURBS')
spline.points.add(count=len(points) - 1)
for i, bp in enumerate(spline.points):
x, y, z = points[i]
bp.co = (x, y, z, 1)
loxodrome = bpy.data.objects.new("Loxodrome", loxocurve)
context.collection.objects.link(loxodrome)
Produces a unit radius curve Loxodrome at (0, 0, 0) applying the matrix_world of a sphere to the loxodrome curve should see it remain on surface. Adjust the parameters in loxodrome_points(10, 10)
for differing 'dromes.
A variety of spirals can be constructed. Equal width (involute), great circles and so on.The Loxodrome on sphere given below is made with above equations on Mathematica.