# Random ellipsoids

Generating random ellipsoids with ImageMagick

I made another. pic.twitter.com/DZ9dP7UblL

— Iván (@justahappygeek) August 7, 2021

# Random ellipsoids

Yesterday I wrote a random post (see what I did there) about generating random circles using ImageMagick. Today I was thinking, what about random ellipsoids?

This should be easy to implement, I think.

Using the script I wrote yesterday,

```
#!/bin/bash
set -x
for I in {1..100}
do
X=$((1 + $RANDOM % 500))
Y=$((1 + $RANDOM % 500))
RADIUS=$((1 + $RANDOM % 100))
convert -size 500x500 xc:black \
-draw "fill white translate $X,$Y circle 0,0,0,$RADIUS" circles$I.png
done
montage -density 300 -tile 10x10 -geometry +5+5 -border 2 *.png montage10x10.jpg
rm -f circles*png
```

I can make some edits so that it generates ellipsoids and translates them randomly on the screen.

```
#!/bin/bash
set -x
for I in {1..100}
do
X=$((1 + $RANDOM % 500))
Y=$((1 + $RANDOM % 500))
RADIUS=$((1 + $RANDOM % 100))
convert -size 500x500 xc:black \
-draw "fill white translate $X,$Y ellipse 50,30 40,20 0,360" ellipsoid$I.png
done
montage -density 300 -tile 10x10 -geometry +5+5 -border 2 ellip*.png montage10x10.jpg
rm -f ellip*png
```

```
bash ./ellipsoid.sh 12.89s user 3.28s system 169% cpu 9.554 total
```

## We can rebuild it… we have the technology

Introducing translation is fine, but without rotation, the ellipsoids look dull. Adding rotation

```
#!/bin/bash
set -x
for I in {1..100}
do
X=$((1 + $RANDOM % 500))
Y=$((1 + $RANDOM % 500))
ANGLE=$((1 + $RANDOM % 360))
RADIUS=$((1 + $RANDOM % 100))
convert -size 500x500 xc:black \
-draw "fill white translate $X,$Y rotate $ANGLE ellipse 50,30 40,20 0,360" ellipsoid$I.png
done
montage -density 300 -tile 10x10 -geometry +5+5 -border 2 ellip*.png montage10x10-translation-and-rotation.jpg
rm -f ellip*png
```

makes it look better.

However, if these are meant to be synthetic primitive cells, then shape is important as well.

## Make it so

Adding rotation is cool, but what about shape? I guess we can play around the parameters.

```
#!/bin/bash
set -x
for I in {1..100}
do
X=$((256 + $RANDOM % 100))
Y=$((256 + $RANDOM % 100))
ANGLE=$((1 + $RANDOM % 360))
X_RADIUS=$((50 + $RANDOM % 500))
Y_RADIUS=$((50 + $RANDOM % 500))
convert -size 1024x1024 xc:black \
-draw "fill white rotate $ANGLE ellipse $X,$Y $X_RADIUS,$Y_RADIUS 0,360" ellipsoid$I.png
done
montage -density 300 -tile 10x10 -geometry +5+5 -border 2 ellip*.png montage10x10-translation-and-rotation.png
convert montage10x10-translation-and-rotation.png -scale 50% montage10x10-translation-and-rotation.png
rm -f ellip*png
```

It is more than obvious this synthetic montage will not fool any cell biologist. Looks better than the first picture from yesterday’s post though.

Keep in mind `$RANDOM`

is always sampling from a uniform distribution, so we can’t make prettier pics. An alternative is to find a package to generate random numbers from other distributions or to do this in Python. Either way, I don’t think I can make it look prettier than it is at the moment.

## But why?

Again I was bored. And was curious to what extent I could use ImageMagick.

These scripts are not optimized nor I claim they are. Just in case.