# Modelling a spiral around a sphere

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.

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:

• Hi, looks like you've got a decent answer going, but it's really hard to follow, and intimidating to read because of not having any line breaks. Could you clean it up a bit please? – TARDIS Maker Nov 26 '15 at 4:51
• Yeah sure, I'll get it done in a bit. – Spencer Brown Nov 26 '15 at 4:54

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')

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)

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.