# Generating Random Smooth Curves Using Physics Principles

Here is a general process for making random smooth curves using physics principles:

1) Initialize a particle at the origin with some random velocity.
2) Apply a constant force which is orthogonal to the velocity.
3) Numerically integrate to calculate and plot the trajectory
4) Change the magnitude / sign of the force periodically, while maintaining the orthogonality

This ensures that the particle maintains a constant speed while continuously and smoothly changing its direction.

Plots and source code are below:

import math
import random

x = 0.0
y = 0.0

m = 1.0

vx = -10.0 + 20.0 * random.random()
vy = -10.0 + 20.0 * random.random()

ax = 0.0
ay = 0.0

t = 0.0
dt = 10.0**(-2.0)

count = 0

Fbase = 50.0

Fmag = -Fbase + 2.0 * Fbase * random.random()

while t <= 100.0:

x = x + vx * dt
y = y + vy * dt

vx = vx + ax * dt
vy = vy + ay * dt

if (count % 100) == 0:

Fmag = -Fbase + 2.0 * Fbase * random.random()

Nx = -vy
Ny = vx

Nmag = math.hypot(vx,vy)

Nx = Nx / Nmag
Ny = Ny / Nmag

Fx = Fmag * Nx
Fy = Fmag * Ny

ax = Fx / m
ay = Fy / m

print t,x,y

t = t + dt
count = count + 1


Note by Steven Chase
7 months ago

MarkdownAppears as
*italics* or _italics_ italics
**bold** or __bold__ bold
- bulleted- list
• bulleted
• list
1. numbered2. list
1. numbered
2. list
Note: you must add a full line of space before and after lists for them to show up correctly
paragraph 1paragraph 2

paragraph 1

paragraph 2

[example link](https://brilliant.org)example link
> This is a quote
This is a quote
    # I indented these lines
# 4 spaces, and now they show
# up as a code block.

print "hello world"
# I indented these lines
# 4 spaces, and now they show
# up as a code block.

print "hello world"
MathAppears as
Remember to wrap math in $$...$$ or $...$ to ensure proper formatting.
2 \times 3 $$2 \times 3$$
2^{34} $$2^{34}$$
a_{i-1} $$a_{i-1}$$
\frac{2}{3} $$\frac{2}{3}$$
\sqrt{2} $$\sqrt{2}$$
\sum_{i=1}^3 $$\sum_{i=1}^3$$
\sin \theta $$\sin \theta$$
\boxed{123} $$\boxed{123}$$

Sort by:

what visualization software is that ?

- 6 months, 3 weeks ago

I'm very primitive. I use Python to print out (x,y) coordinate pairs. And then I paste into Excel and make a scatter plot.

- 6 months, 3 weeks ago

have you tried what happens with increasing the range ?

- 6 months, 3 weeks ago

You mean the run time?

- 6 months, 3 weeks ago

I probably did, and thought that this was some sort of optimum. I actually wrote the code for this a year ago or so. It might be fun to try a spherical coordinates version too.

- 6 months, 3 weeks ago

yes exactly, also thought about it. Btw, do you use python 2 or 3 ?

- 6 months, 3 weeks ago

I use Python 2.7

- 6 months, 3 weeks ago

- 6 months, 3 weeks ago

quite impressive just for that :o

- 6 months, 3 weeks ago

This must have taken you forever

- 7 months ago

- 7 months ago

Wow. You must like coding a lot

- 7 months ago