From 7239b6f343e8c784f00b4c159761b15c12baa3af Mon Sep 17 00:00:00 2001 From: JuleAdrian Date: Wed, 4 Nov 2026 11:20:51 +0100 Subject: [PATCH 1/7] solve errors in acceleration computation and adjust user guide --- notebooks/user_guide.ipynb | 42 ++++++++++------- pedpy/methods/acceleration_calculator.py | 57 +++++++++++++++--------- pedpy/methods/method_utils.py | 18 ++++---- 3 files changed, 70 insertions(+), 47 deletions(-) diff --git a/notebooks/user_guide.ipynb b/notebooks/user_guide.ipynb index c2d77b5d..75453f7b 100644 --- a/notebooks/user_guide.ipynb +++ b/notebooks/user_guide.ipynb @@ -2683,37 +2683,45 @@ "a specific frame step ($n$) is needed.\n", "Together with the {class}`trajectory data` $fps$ of\n", "the trajectory data $fps$ the time frame $\\Delta t$ for\n", - "computing the speed becomes:\n", + "computing the speed and the acceleration becomes:\n", "\n", "$$\n", "\\Delta t = 2 n / fps\n", "$$\n", "\n", - "This time step describes how many frames before and after the current\n", - "position $X(t_k)$ are used to compute the movement.\n", - "These positions are called $X(t_{k+n})$, $X(t_{k-n})$\n", - "respectively.\n", + "The acceleration at time $t_k$ can be calculated from the speeds\n", + "$v(t_{k+n})$ and $v(t_{k-n})$:\n", "\n", - "In order to compute the acceleration at time $t_k$, we first calculate the\n", - "displacements $\\bar{X}$ around $t_{k+n}$ and $t_{k-n}$:\n", - "\n", - "$$\n", - "\\bar{X}(t_{k+n}) = X(t_{k+2n}) - X(t_{k})\n", "$$\n", + "v(t_{k+n}) = \bar{X}(t_{k+n}) / \Delta t\n", + "$$\n", "$$\n", - "\\bar{X}(t_{k-n}) = X(t_{k}) - X(t_{k-2n})\n", + "v(t_{k-n}) = \bar{X}(t_{k-n}) / \Delta t\n", "$$\n", - "\n", - "The acceleration is then calculated from the difference of the displacements\n", + "using the displacements $\bar{X}(t_{k+n})$ and $\bar{X}(t_{k-n})$\n", + "during $\Delta t$ around $t_{k+n}$ and $t_{k-n}$:\n", "\n", "$$\n", - "\\Delta\\bar{X}(t_k) = \\bar{X}(t_{k+n}) - \\bar{X}(t_{k-n})\n", + "\bar{X}(t_{k+n}) = X(t_{k+2n}) - X(t_{k})\n", + "$$\n", + "$$\n", + "\bar{X}(t_{k-n}) = X(t_{k}) - X(t_{k-2n})\n", "$$\n", + "The acceleration $a_i(t_k)$ is then calculated from the difference of\n", + "the speeds divided by the time interval $\Delta t$:\n", "\n", - "divided by the square of the time interval $\\Delta t$:\n", - "\n", "$$\n", - "a_i(t_k) = \\Delta\\bar{X}(t_k) / \\Delta t^{2}\n", + "a_i(t_k) = (v(t_{k+n}) - v(t_{k-n})) / \Delta t\n", + "which is simplified to\n", + "$$\n", + "a_i(t_k) = \Delta\bar{X}(t_k) / (\Delta t^{2})\n", + "$$\n", + "using\n", + "$$\n", + "\Delta\bar{X}(t_k) = \bar{X}(t_{k+n}) - \bar{X}(t_{k-n})\n", + "$$\n", + "$$\n", + "\Delta\bar{X}(t_k) = X(t_{k+2n}) - 2*X(t_{k}) + X(t_{k-2n})\n", "$$\n", "\n", "When getting closer to the start, or end of the trajectory data, it is not\n", diff --git a/pedpy/methods/acceleration_calculator.py b/pedpy/methods/acceleration_calculator.py index fee9ed47..cc802c90 100644 --- a/pedpy/methods/acceleration_calculator.py +++ b/pedpy/methods/acceleration_calculator.py @@ -30,23 +30,27 @@ def compute_individual_acceleration( For computing the individuals' acceleration at a specific frame :math:`a_i(t_k)`, a specific frame step (:math:`n`) is needed. - Together with the - :attr:`~trajectory_data.TrajectoryData.frame_rate` of the trajectory data - :math:`fps` the time frame :math:`\Delta t` for computing the speed - becomes: + Together with the :attr:`~trajectory_data.TrajectoryData.frame_rate` + of the trajectory data :math:`fps` the time frame :math:`\Delta t` + for computing the speed and the acceleration becomes: .. math:: \Delta t = 2 n / fps - This time step describes how many frames before and after the current - position :math:`X(t_k)` are used to compute the movement. - These positions are called :math:`X(t_{k+n})`, :math:`X(t_{k-n})` - respectively. + The acceleration at time :math:`t_k` can be calculated from the speeds + :math:`v(t_{k+n})` and :math:`v(t_{k-n})`: - In order to compute the acceleration at time :math:`t_k`, we first - calculate the displacements :math:`\bar{X}` around :math:`t_{k+n}` and - :math:`t_{k-n}`: + .. math:: + + v(t_{k+n}) = \bar{X}(t_{k+n}) / \Delta t + + .. math:: + + v(t_{k-n}) = \bar{X}(t_{k-n}) / \Delta t + + using the displacements :math:`\bar{X}(t_{k+n})` and :math:`\bar{X}(t_{k-n})` + during :math:`\Delta t` around :math:`t_{k+n}` and :math:`t_{k-n}`: .. math:: @@ -56,18 +60,29 @@ def compute_individual_acceleration( \bar{X}(t_{k-n}) = X(t_{k}) - X(t_{k-2n}) - The acceleration is then calculated from the difference of the - displacements + + The acceleration :math:`a_i(t_k)` is then calculated from the difference of + the speeds divided by the time interval :math:`\Delta t`: .. math:: - \Delta\bar{X}(t_k) = \bar{X}(t_{k+n}) - \bar{X}(t_{k-n}) + a_i(t_k) = (v(t_{k+n}) - v(t_{k-n})) / \Delta t - divided by the square of the time interval :math:`\Delta t`: + which is simplified to .. math:: - a_i(t_k) = \Delta\bar{X}(t_k) / \Delta t^{2} + a_i(t_k) = \Delta\bar{X}(t_k) / (\Delta t^{2}) + + using + + .. math:: + + \Delta\bar{X}(t_k) = \bar{X}(t_{k+n}) - \bar{X}(t_{k-n}) + + .. math:: + + \Delta\bar{X}(t_k) = X(t_{k+2n}) - 2*X(t_{k}) + X(t_{k-2n}) When getting closer to the start, or end of the trajectory data, it is not @@ -298,14 +313,14 @@ def _compute_individual_acceleration( components in x and y direction if compute_acceleration is True """ columns = [ID_COL, FRAME_COL, ACC_COL] - time_interval = movement_data.window_size / frame_rate + time_interval = 0.5 * movement_data.window_size / frame_rate # Compute displacements in x and y direction movement_data[["dd_x", "dd_y"]] = ( shapely.get_coordinates(movement_data.end_position) - shapely.get_coordinates(movement_data.mid_position) ) - (shapely.get_coordinates(movement_data.mid_position) - shapely.get_coordinates(movement_data.start_position)) - movement_data[ACC_COL] = np.linalg.norm(movement_data[["dd_x", "dd_y"]], axis=1) / time_interval**2 + movement_data[ACC_COL] = np.linalg.norm(movement_data[["dd_x", "dd_y"]], axis=1) / (time_interval**2) if movement_direction is not None: # Projection of the displacement onto the movement direction @@ -318,12 +333,12 @@ def _compute_individual_acceleration( movement_data[ACC_COL] = ( np.dot(movement_data[["dd_x", "dd_y"]].to_numpy(), movement_direction) / np.linalg.norm(movement_direction) - / time_interval**2 + / (time_interval**2) ) if compute_acceleration_components: - movement_data[A_X_COL] = movement_data["dd_x"].to_numpy() / time_interval**2 - movement_data[A_Y_COL] = movement_data["dd_y"].to_numpy() / time_interval**2 + movement_data[A_X_COL] = movement_data["dd_x"].to_numpy() / (time_interval**2) + movement_data[A_Y_COL] = movement_data["dd_y"].to_numpy() / (time_interval**2) columns.append(A_X_COL) columns.append(A_Y_COL) diff --git a/pedpy/methods/method_utils.py b/pedpy/methods/method_utils.py index 76bb0464..c006942b 100644 --- a/pedpy/methods/method_utils.py +++ b/pedpy/methods/method_utils.py @@ -1002,8 +1002,8 @@ def _compute_movement_acceleration_exclude_border( ) -> pd.DataFrame: """Compute the individual movement in the time interval frame_step. - The movement is computed for the interval [frame - frame_step: frame + - frame_step], if one of the boundaries is not contained in the trajectory + The movement is computed for the interval [frame - 2 * frame_step: frame + + 2 * frame_step], if one of the boundaries is not contained in the trajectory frame these points will not be considered. Args: @@ -1022,16 +1022,16 @@ def _compute_movement_acceleration_exclude_border( """ df_movement = traj_data.data.copy(deep=True) - df_movement[START_POSITION_COL] = df_movement.groupby(by=ID_COL).point.shift(2 * frame_step) - df_movement["start_frame"] = df_movement.groupby(by=ID_COL).frame.shift(2 * frame_step) + df_movement[START_POSITION_COL] = df_movement.groupby(by=ID_COL).point.shift(-2 * frame_step) + df_movement["start_frame"] = df_movement.groupby(by=ID_COL).frame.shift(-2 * frame_step) - df_movement[MID_POSITION_COL] = df_movement.groupby(by=ID_COL).point.shift(frame_step) - df_movement["mid_frame"] = df_movement.groupby(by=ID_COL).frame.shift(frame_step) + df_movement[MID_POSITION_COL] = df_movement.point + df_movement["mid_frame"] = df_movement.frame - df_movement[END_POSITION_COL] = df_movement.point - df_movement["end_frame"] = df_movement.frame + df_movement[END_POSITION_COL] = df_movement.groupby(by=ID_COL).point.shift(2 * frame_step) + df_movement["end_frame"] = df_movement.groupby(by=ID_COL).frame.shift(2 * frame_step) - df_movement[WINDOW_SIZE_COL] = df_movement.end_frame - df_movement.mid_frame + df_movement[WINDOW_SIZE_COL] = df_movement.end_frame - df_movement.start_frame return df_movement[ [ ID_COL, From 7db436c074b91fcd20e30b88ec9ef53e705a213e Mon Sep 17 00:00:00 2001 From: JuleAdrian Date: Wed, 4 Nov 2026 11:45:17 +0100 Subject: [PATCH 2/7] adjust user guide --- notebooks/user_guide.ipynb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/notebooks/user_guide.ipynb b/notebooks/user_guide.ipynb index 75453f7b..339467af 100644 --- a/notebooks/user_guide.ipynb +++ b/notebooks/user_guide.ipynb @@ -2694,7 +2694,7 @@ "\n", "$$\n", "v(t_{k+n}) = \bar{X}(t_{k+n}) / \Delta t\n", - "$$\n", + "$$\n", "$$\n", "v(t_{k-n}) = \bar{X}(t_{k-n}) / \Delta t\n", "$$\n", @@ -2703,8 +2703,8 @@ "\n", "$$\n", "\bar{X}(t_{k+n}) = X(t_{k+2n}) - X(t_{k})\n", - "$$\n", - "$$\n", + "$$\n", + "$$\n", "\bar{X}(t_{k-n}) = X(t_{k}) - X(t_{k-2n})\n", "$$\n", "The acceleration $a_i(t_k)$ is then calculated from the difference of\n", From 1e19032fbe2daae8009c3cdd45f08a89cfa1d300 Mon Sep 17 00:00:00 2001 From: JuleAdrian Date: Wed, 4 Nov 2026 12:03:10 +0100 Subject: [PATCH 3/7] adjust user guide --- notebooks/user_guide.ipynb | 156 +++++++++++++++++++++++++++++++++---- 1 file changed, 142 insertions(+), 14 deletions(-) diff --git a/notebooks/user_guide.ipynb b/notebooks/user_guide.ipynb index 339467af..cc75d7a0 100644 --- a/notebooks/user_guide.ipynb +++ b/notebooks/user_guide.ipynb @@ -4,6 +4,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "is_executing": true, "outputs_hidden": false @@ -52,6 +53,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -66,6 +68,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -92,6 +95,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -143,6 +147,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -163,6 +168,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -183,6 +189,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -231,6 +238,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -275,6 +283,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -286,6 +295,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -337,6 +347,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -355,6 +366,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -367,6 +379,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -387,6 +400,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -404,6 +418,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -697,6 +712,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -711,6 +727,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -743,6 +760,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -759,6 +777,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -774,6 +793,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -789,6 +809,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -880,6 +901,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -973,6 +995,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -988,6 +1011,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -1008,6 +1032,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -1030,6 +1055,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -1077,6 +1103,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -1120,6 +1147,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -1134,6 +1162,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -1158,6 +1187,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -1176,6 +1206,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -1190,6 +1221,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -1258,6 +1290,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -1282,6 +1315,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -1299,6 +1333,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -1319,6 +1354,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -1333,6 +1369,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -1350,6 +1387,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -1374,6 +1412,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -1468,6 +1507,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -1521,6 +1561,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -1545,6 +1586,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -1642,6 +1684,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -1691,6 +1734,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -1713,6 +1757,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -1744,6 +1789,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -1771,6 +1817,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -1791,6 +1838,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -1815,6 +1863,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -1846,6 +1895,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -1866,6 +1916,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -1894,6 +1945,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -2012,6 +2064,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -2031,6 +2084,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -2064,6 +2118,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -2094,6 +2149,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -2113,6 +2169,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -2145,6 +2202,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -2162,6 +2220,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -2186,6 +2245,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -2223,6 +2283,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -2243,6 +2304,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -2275,6 +2337,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -2293,6 +2356,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -2317,6 +2381,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -2371,6 +2436,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -2448,6 +2514,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -2469,6 +2536,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -2489,6 +2557,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -2504,6 +2573,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -2518,6 +2588,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -2536,6 +2607,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -2556,6 +2628,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -2613,6 +2686,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -2635,6 +2709,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -2658,6 +2733,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -2670,6 +2746,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -2679,10 +2756,10 @@ "\n", "Compute the individual acceleration for each pedestrian.\n", "\n", - "For computing the individuals' acceleration at a specific frame $a_i(t_k)$,\n", + "For computing the individuals' acceleration at a specific frame $a_i(t_k)$\n", "a specific frame step ($n$) is needed.\n", "Together with the {class}`trajectory data` $fps$ of\n", - "the trajectory data $fps$ the time frame $\\Delta t$ for\n", + "the trajectory data, the time frame $\\Delta t$ for\n", "computing the speed and the acceleration becomes:\n", "\n", "$$\n", @@ -2693,35 +2770,36 @@ "$v(t_{k+n})$ and $v(t_{k-n})$:\n", "\n", "$$\n", - "v(t_{k+n}) = \bar{X}(t_{k+n}) / \Delta t\n", + "v(t_{k+n}) = \\bar{X}(t_{k+n}) / \\Delta t\n", "$$\n", "$$\n", - "v(t_{k-n}) = \bar{X}(t_{k-n}) / \Delta t\n", + "v(t_{k-n}) = \\bar{X}(t_{k-n}) / \\Delta t\n", "$$\n", - "using the displacements $\bar{X}(t_{k+n})$ and $\bar{X}(t_{k-n})$\n", - "during $\Delta t$ around $t_{k+n}$ and $t_{k-n}$:\n", + "using the displacements $\\bar{X}(t_{k+n})$ and $\\bar{X}(t_{k-n})$\n", + "during $\\Delta t$ around $t_{k+n}$ and $t_{k-n}$:\n", "\n", "$$\n", - "\bar{X}(t_{k+n}) = X(t_{k+2n}) - X(t_{k})\n", + "\\bar{X}(t_{k+n}) = X(t_{k+2n}) - X(t_{k})\n", "$$\n", "$$\n", - "\bar{X}(t_{k-n}) = X(t_{k}) - X(t_{k-2n})\n", + "\\bar{X}(t_{k-n}) = X(t_{k}) - X(t_{k-2n})\n", "$$\n", "The acceleration $a_i(t_k)$ is then calculated from the difference of\n", - "the speeds divided by the time interval $\Delta t$:\n", + "the speeds divided by the time interval $\\Delta t$:\n", "\n", "$$\n", - "a_i(t_k) = (v(t_{k+n}) - v(t_{k-n})) / \Delta t\n", + "a_i(t_k) = (v(t_{k+n}) - v(t_{k-n})) / \\Delta t\n", + "$$\n", "which is simplified to\n", "$$\n", - "a_i(t_k) = \Delta\bar{X}(t_k) / (\Delta t^{2})\n", + "a_i(t_k) = \\Delta\\bar{X}(t_k) / (\\Delta t^{2})\n", "$$\n", "using\n", "$$\n", - "\Delta\bar{X}(t_k) = \bar{X}(t_{k+n}) - \bar{X}(t_{k-n})\n", + "\\Delta\\bar{X}(t_k) = \\bar{X}(t_{k+n}) - \\bar{X}(t_{k-n})\n", "$$\n", "$$\n", - "\Delta\bar{X}(t_k) = X(t_{k+2n}) - 2*X(t_{k}) + X(t_{k-2n})\n", + "\\Delta\\bar{X}(t_k) = X(t_{k+2n}) - 2*X(t_{k}) + X(t_{k-2n})\n", "$$\n", "\n", "When getting closer to the start, or end of the trajectory data, it is not\n", @@ -2741,6 +2819,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -2763,6 +2842,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -3182,6 +3262,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -3264,6 +3345,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -3280,6 +3362,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -3434,6 +3517,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -3474,6 +3558,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -4072,6 +4157,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -4101,6 +4187,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -4506,6 +4593,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -4542,6 +4630,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -4775,6 +4864,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -4789,6 +4879,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -4802,6 +4893,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -4827,6 +4919,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -4839,6 +4932,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -4853,6 +4947,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -4879,6 +4974,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -4929,6 +5025,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -4943,6 +5040,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -4955,6 +5053,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -4967,6 +5066,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -4979,6 +5079,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -4992,6 +5093,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -5006,6 +5108,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -5023,6 +5126,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -5037,6 +5141,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -5052,6 +5157,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -5067,6 +5173,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -5081,6 +5188,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -5124,6 +5232,7 @@ { "cell_type": "markdown", "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -5138,6 +5247,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -5160,7 +5270,25 @@ ] } ], - "metadata": {}, + "metadata": { + "kernelspec": { + "display_name": "pedpy_venv_2026_10_30", + "language": "python", + "name": "pedpy_venv_2026_10_30" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.15.1" + } + }, "nbformat": 4, "nbformat_minor": 4 } From b6f3d09015c7d2b4463f246182d431cc87fda794 Mon Sep 17 00:00:00 2001 From: JuleAdrian Date: Wed, 4 Nov 2026 12:28:51 +0100 Subject: [PATCH 4/7] adjust formatting --- pedpy/methods/acceleration_calculator.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/pedpy/methods/acceleration_calculator.py b/pedpy/methods/acceleration_calculator.py index cc802c90..508244ef 100644 --- a/pedpy/methods/acceleration_calculator.py +++ b/pedpy/methods/acceleration_calculator.py @@ -30,15 +30,15 @@ def compute_individual_acceleration( For computing the individuals' acceleration at a specific frame :math:`a_i(t_k)`, a specific frame step (:math:`n`) is needed. - Together with the :attr:`~trajectory_data.TrajectoryData.frame_rate` - of the trajectory data :math:`fps` the time frame :math:`\Delta t` + Together with the :attr:`~trajectory_data.TrajectoryData.frame_rate` + of the trajectory data :math:`fps` the time frame :math:`\Delta t` for computing the speed and the acceleration becomes: .. math:: \Delta t = 2 n / fps - The acceleration at time :math:`t_k` can be calculated from the speeds + The acceleration at time :math:`t_k` can be calculated from the speeds :math:`v(t_{k+n})` and :math:`v(t_{k-n})`: .. math:: @@ -61,7 +61,7 @@ def compute_individual_acceleration( \bar{X}(t_{k-n}) = X(t_{k}) - X(t_{k-2n}) - The acceleration :math:`a_i(t_k)` is then calculated from the difference of + The acceleration :math:`a_i(t_k)` is then calculated from the difference of the speeds divided by the time interval :math:`\Delta t`: .. math:: @@ -74,7 +74,7 @@ def compute_individual_acceleration( a_i(t_k) = \Delta\bar{X}(t_k) / (\Delta t^{2}) - using + using .. math:: @@ -320,7 +320,7 @@ def _compute_individual_acceleration( shapely.get_coordinates(movement_data.end_position) - shapely.get_coordinates(movement_data.mid_position) ) - (shapely.get_coordinates(movement_data.mid_position) - shapely.get_coordinates(movement_data.start_position)) - movement_data[ACC_COL] = np.linalg.norm(movement_data[["dd_x", "dd_y"]], axis=1) / (time_interval**2) + movement_data[ACC_COL] = np.linalg.norm(movement_data[["dd_x", "dd_y"]], axis=1) / time_interval**2 if movement_direction is not None: # Projection of the displacement onto the movement direction @@ -337,8 +337,8 @@ def _compute_individual_acceleration( ) if compute_acceleration_components: - movement_data[A_X_COL] = movement_data["dd_x"].to_numpy() / (time_interval**2) - movement_data[A_Y_COL] = movement_data["dd_y"].to_numpy() / (time_interval**2) + movement_data[A_X_COL] = movement_data["dd_x"].to_numpy() / time_interval**2 + movement_data[A_Y_COL] = movement_data["dd_y"].to_numpy() / time_interval**2 columns.append(A_X_COL) columns.append(A_Y_COL) From 7587a81c6c11a13943fa0ff2c3251f21e8fc8291 Mon Sep 17 00:00:00 2001 From: JuleAdrian Date: Wed, 4 Nov 2026 12:39:22 +0100 Subject: [PATCH 5/7] adjust formatting --- pedpy/methods/acceleration_calculator.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pedpy/methods/acceleration_calculator.py b/pedpy/methods/acceleration_calculator.py index 508244ef..31c4c1fa 100644 --- a/pedpy/methods/acceleration_calculator.py +++ b/pedpy/methods/acceleration_calculator.py @@ -60,7 +60,7 @@ def compute_individual_acceleration( \bar{X}(t_{k-n}) = X(t_{k}) - X(t_{k-2n}) - + The acceleration :math:`a_i(t_k)` is then calculated from the difference of the speeds divided by the time interval :math:`\Delta t`: @@ -79,7 +79,7 @@ def compute_individual_acceleration( .. math:: \Delta\bar{X}(t_k) = \bar{X}(t_{k+n}) - \bar{X}(t_{k-n}) - + .. math:: \Delta\bar{X}(t_k) = X(t_{k+2n}) - 2*X(t_{k}) + X(t_{k-2n}) From ced1d542f3e4c87b7a844ac32efa8ded36ce80c4 Mon Sep 17 00:00:00 2001 From: JuleAdrian Date: Wed, 4 Nov 2026 12:46:36 +0100 Subject: [PATCH 6/7] adjust formatting --- notebooks/user_guide.ipynb | 128 +++---------------------------------- 1 file changed, 10 insertions(+), 118 deletions(-) diff --git a/notebooks/user_guide.ipynb b/notebooks/user_guide.ipynb index cc75d7a0..64d47eb5 100644 --- a/notebooks/user_guide.ipynb +++ b/notebooks/user_guide.ipynb @@ -4,7 +4,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "is_executing": true, "outputs_hidden": false @@ -53,7 +52,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -68,7 +66,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -95,7 +92,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -147,7 +143,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -168,7 +163,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -189,7 +183,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -238,7 +231,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -283,7 +275,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -295,7 +286,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -347,7 +337,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -366,7 +355,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -379,7 +367,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -400,7 +387,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -418,7 +404,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -712,7 +697,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -727,7 +711,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -760,7 +743,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -777,7 +759,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -793,7 +774,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -809,7 +789,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -901,7 +880,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -995,7 +973,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -1011,7 +988,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -1032,7 +1008,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -1055,7 +1030,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -1103,7 +1077,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -1147,7 +1120,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -1162,7 +1134,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -1187,7 +1158,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -1206,7 +1176,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -1221,7 +1190,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -1290,7 +1258,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -1315,7 +1282,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -1333,7 +1299,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -1354,7 +1319,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -1369,7 +1333,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -1387,7 +1350,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -1412,7 +1374,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -1507,7 +1468,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -1561,7 +1521,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -1586,7 +1545,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -1684,7 +1642,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -1734,7 +1691,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -1757,7 +1713,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -1789,7 +1744,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -1817,7 +1771,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -1838,7 +1791,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -1863,7 +1815,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -1895,7 +1846,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -1916,7 +1866,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -1945,7 +1894,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -2064,7 +2012,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -2084,7 +2031,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -2118,7 +2064,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -2149,7 +2094,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -2169,7 +2113,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -2202,7 +2145,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -2220,7 +2162,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -2245,7 +2186,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -2283,7 +2223,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -2304,7 +2243,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -2337,7 +2275,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -2356,7 +2293,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -2381,7 +2317,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -2436,7 +2371,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -2514,7 +2448,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -2536,7 +2469,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -2557,7 +2489,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -2573,7 +2504,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -2588,7 +2518,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -2607,7 +2536,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -2628,7 +2556,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -2686,7 +2613,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -2709,7 +2635,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -2733,7 +2658,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -2746,7 +2670,7 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, + "jp-MarkdownHeadingCollapsed": true, "jupyter": { "outputs_hidden": false } @@ -2763,43 +2687,43 @@ "computing the speed and the acceleration becomes:\n", "\n", "$$\n", - "\\Delta t = 2 n / fps\n", + " \\Delta t = 2 n / fps\n", "$$\n", "\n", "The acceleration at time $t_k$ can be calculated from the speeds\n", "$v(t_{k+n})$ and $v(t_{k-n})$:\n", "\n", "$$\n", - "v(t_{k+n}) = \\bar{X}(t_{k+n}) / \\Delta t\n", + " v(t_{k+n}) = \\bar{X}(t_{k+n}) / \\Delta t\n", "$$\n", "$$\n", - "v(t_{k-n}) = \\bar{X}(t_{k-n}) / \\Delta t\n", + " v(t_{k-n}) = \\bar{X}(t_{k-n}) / \\Delta t\n", "$$\n", "using the displacements $\\bar{X}(t_{k+n})$ and $\\bar{X}(t_{k-n})$\n", "during $\\Delta t$ around $t_{k+n}$ and $t_{k-n}$:\n", "\n", "$$\n", - "\\bar{X}(t_{k+n}) = X(t_{k+2n}) - X(t_{k})\n", + " \\bar{X}(t_{k+n}) = X(t_{k+2n}) - X(t_{k})\n", "$$\n", "$$\n", - "\\bar{X}(t_{k-n}) = X(t_{k}) - X(t_{k-2n})\n", + " \\bar{X}(t_{k-n}) = X(t_{k}) - X(t_{k-2n})\n", "$$\n", "The acceleration $a_i(t_k)$ is then calculated from the difference of\n", "the speeds divided by the time interval $\\Delta t$:\n", "\n", "$$\n", - "a_i(t_k) = (v(t_{k+n}) - v(t_{k-n})) / \\Delta t\n", + " a_i(t_k) = (v(t_{k+n}) - v(t_{k-n})) / \\Delta t\n", "$$\n", "which is simplified to\n", "$$\n", - "a_i(t_k) = \\Delta\\bar{X}(t_k) / (\\Delta t^{2})\n", + " a_i(t_k) = \\Delta\\bar{X}(t_k) / (\\Delta t^{2})\n", "$$\n", "using\n", "$$\n", - "\\Delta\\bar{X}(t_k) = \\bar{X}(t_{k+n}) - \\bar{X}(t_{k-n})\n", + " \\Delta\\bar{X}(t_k) = \\bar{X}(t_{k+n}) - \\bar{X}(t_{k-n})\n", "$$\n", "$$\n", - "\\Delta\\bar{X}(t_k) = X(t_{k+2n}) - 2*X(t_{k}) + X(t_{k-2n})\n", + " \\Delta\\bar{X}(t_k) = X(t_{k+2n}) - 2*X(t_{k}) + X(t_{k-2n})\n", "$$\n", "\n", "When getting closer to the start, or end of the trajectory data, it is not\n", @@ -2819,7 +2743,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -2842,7 +2765,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -3262,7 +3184,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -3345,7 +3266,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -3362,7 +3282,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -3517,7 +3436,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -3558,7 +3476,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -4157,7 +4074,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -4187,7 +4103,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -4593,7 +4508,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -4630,7 +4544,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -4864,7 +4777,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -4879,7 +4791,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -4893,7 +4804,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -4919,7 +4829,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -4932,7 +4841,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -4947,7 +4855,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -4974,7 +4881,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -5025,7 +4931,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -5040,7 +4945,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -5053,7 +4957,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -5066,7 +4969,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -5079,7 +4981,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -5093,7 +4994,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -5108,7 +5008,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -5126,7 +5025,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -5141,7 +5039,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -5157,7 +5054,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -5173,7 +5069,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -5188,7 +5083,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -5232,7 +5126,6 @@ { "cell_type": "markdown", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -5247,7 +5140,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } From de57a9701747bde049d747acf876d7f8f581fdee Mon Sep 17 00:00:00 2001 From: JuleAdrian Date: Wed, 4 Nov 2026 13:20:38 +0100 Subject: [PATCH 7/7] adjust formatting --- notebooks/user_guide.ipynb | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/notebooks/user_guide.ipynb b/notebooks/user_guide.ipynb index 64d47eb5..b9bedddb 100644 --- a/notebooks/user_guide.ipynb +++ b/notebooks/user_guide.ipynb @@ -5162,25 +5162,7 @@ ] } ], - "metadata": { - "kernelspec": { - "display_name": "pedpy_venv_2026_10_30", - "language": "python", - "name": "pedpy_venv_2026_10_30" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.15.1" - } - }, + "metadata": {}, "nbformat": 4, "nbformat_minor": 4 }