# How to make objects follow a ellipse? (Duplication around ellipse)

I am trying to make a Quidditch scene from Harry Potter.

So I am trying to make outer diagonal trees.

I used Array modifier Object offset, target to empty at center

I can make "Circle" but I can not make "Ellipse".

I tried to change Location, Rotation and Scale of Empty and Wood Object.

Thank you.

(Blender 2.90 Windows 10)

Create a plane, create a curve, scale the curve in Edit mode to make an ellipse, give the plane an Array and a Curve modifier with the curve as Curve Object:

Create your tower object, parent it to the plane. Select the plane, in the Properties panel > Object > Instancing, press on Faces, your tower will duplicate around the ellipse shape:

To make each instance independent, select the towers and press CtrlA > Make Instances Real. If you want them to not share the same mesh, go into the header menu > Object > Relations > Make Single User > Object & Data.

• but you could also do this with python - batFinger would need 2 mins for this ;) – Chris Apr 14 at 9:48
• wait for the Robin Betts's full procedural solution!!! – moonboots Apr 14 at 9:49
• ok, i will wait!!! So Robin, why do you need so long? – Chris Apr 14 at 9:50
• Probably he's not as strong as we thought :// – moonboots Apr 14 at 10:37
• This is a bit disappointing...so I always looked up to my heroes: Iron man, Supergirl, Wonderwoman, Spider-Man, Fantastic four, batFingers, Robin Betts, Moonboots...but looks like I have to reduce my list. :D – Chris Apr 14 at 10:54

When using follow path with fixed position one end is offset factor 0.0 the other 1.0 or for a cycle this is same. Half way is 0.5 etc.

Make a tower at origin, give it a follow path constraint, using the ellipse, with fixed position and no offset factor.

And oops, make sure that scale is applied on your ellipse AltS Scale ie it has unit scale and select follow curve on constraint to have the towers aligned to ellipse.

Now duplicate the mesh and move it around the ellipse using the offset factor...... being a scripter that's too much hard work, so have written a little script to do just this. Or via UI with Shift or Alt D for duplicate linked (same mesh) or unlinked respectively. And set the offset factor for each.

Little script, select tower, run script to make other distributed copies.

import bpy
from bpy import context

copies = 16

for i in range(1, copies): # copies - 1
tower = context.object.copy()
# comment following to have linked copies (same mesh)
tower.data = tower.data.copy() # an unlinked dupe (own mesh)
tower.constraints[0].offset_factor = i / copies