2
$\begingroup$

When using an Empty for the Object Offset of an Array modifier, if you scale the Empty, each iteration of the Array is scaled based on the previous iteration.

So if the original object is of size 1, and the Empty has a scale of 1.1, the iterations of the Array will be sized: 1, 1.1, 1.21, 1.331, 1.4641, etc.

I'm trying to find a formula which gives the necessary scale value for the Empty so that the final result of the Array (with any given Count value) is of a predefined size.

I can't show what I've tried until now because I have no idea how to approach this and am hoping that some more advanced mathematician than I can help me out.

$\endgroup$

1 Answer 1

2
$\begingroup$

Lets say you have an object with scale $s_{O}$ and dimension $d_{O}$ and an empty with scale $s_{E}$. Then, to get the size of the count-th array object $s_c$ you need to compute

$s_c = d_O \cdot \left( \frac{s_E}{s_O}\right)^{c-1}$

where $c$ is the Count of the Array modifier. Note that Count starts at $1$. So for your example you'll get

$s_1 = 1\cdot\left(\frac{1.1}{1}\right)^{1-1} = 1.1^0 = 1$

$s_2 = 1.1^1 = 1.1, s_3 = 1.1^2 = 1.21, s_4 = 1.1^3 = 1.331, ...$

Ok, works. Now with a given $s_c$ you need to solve the equation for $s_E$ which gives

$s_E = s_O \cdot \sqrt[\leftroot{-1}\uproot{3}c-1]{\strut\frac{s_c}{d_O}}$

or in Python:

def get_necessary_empty_scale(s_o, d_o, s_c, count):
    return s_o * (s_c / d_o) ** (1.0 / (count - 1))

A little test with $s_5 = 1.4641$:

$s_E = 1 \cdot \sqrt[\leftroot{-1}\uproot{3}5-1]{\strut\frac{1.4641}{1}} = \sqrt[\leftroot{-1}\uproot{3}4]{1.4641} = 1.1$

Don't use that function for count = 1, in that case the empty's scale is undefined. You can see this in Blender, when you set the Count to 1, scaling the empty changes nothing on the array'ed object.

And you need to be careful a bit with receiving $d_O$ correctly, its the dimension of the original object. If the Array modifier is active in viewport, the sidebar will show the dimension of the whole array object. Disable it to see the original dimension or set the array count temporarily to 1.

$\endgroup$
1
  • $\begingroup$ Wonderful taiyo! Beautiful work and what a great answer. Thank you! $\endgroup$
    – gcs_dev
    Oct 8, 2023 at 3:53

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .