c4dynamics.states.state.state.P

Contents

c4dynamics.states.state.state.P#

state.P(state2=None)[source]#

Euclidean distance.

Calculates the Euclidean distance between the self state object and a second object state2. If state2 is not provided, then the self Euclidean distance is calculated.

When a second state object is provided:

\[P = \sum_{k=x,y,z} (self.k - state2.k)^2\]

Otherwise:

\[P = \sum_{k=x,y,z} self.k^2\]
Raises:

TypeError – If the states don’t include any position coordinate (x, y, z).

Note

  1. The provided states must have at least oneposition coordinate (x, y, z).

  2. In the context of P(), x, y, z, (case sensitive) are considered position coordinates.

Parameters:

state2 (state) – A second state object for which the relative distance is calculated.

Returns:

out (float) – Euclidean norm of the distance vector. The return type specifically is a numpy.float64.

Examples

>>> import c4dynamics as c4d
>>> s = c4d.state(theta = 3.14, x = 1, y = 1)
>>> s.P()   
1.414...
>>> s  = c4d.state(theta = 3.14, x = 1, y = 1)
>>> s2 = c4d.state(x = 1)
>>> s.P(s2)
1.0
>>> s  = c4d.state(theta = 3.14, x = 1, y = 1)
>>> s2 = c4d.state(z = 1)
>>> s.P(s2)   
1.73...

For final example, import required packages:

>>> import numpy as np
>>> from matplotlib import pyplot as plt

Settings and initial conditions:

>>> camera = c4d.state(x = 0, y = 0)
>>> car    = c4d.datapoint(x = -100, vx = 40, vy = -7)
>>> dist   = []
>>> time = np.linspace(0, 10, 1000)

Main loop:

>>> for t in time:
...   car.inteqm(np.zeros(3), time[1] - time[0]) 
...   dist.append(camera.P(car))

Show results:

>>> plt.plot(time, dist, 'm') 
>>> c4d.plotdefaults(plt.gca(), 'Distance', 'Time (s)', '(m)')
>>> plt.show()
../../../_images/state_P.png