add_frontal_plane_projection_angle: add fontal plane projection angle kinematics to a mocap...

View source: R/frontal_plane_kinematics.R

add_frontal_plane_projection_angleR Documentation

add fontal plane projection angle kinematics to a mocap tibble.

Description

add_frontal_plane_projection_angle() adds the frontal plane projection angle to a tibble. Negative values implies dynamic knee valgus.
mocapr calculates the angle in the anatomical planes rather than using global coordinates. You must, therefore, likely run the function project_full_body_to_AP() in order to obtain the joint center positions in the anatomical planes that are nescceary in order to compute the the frontal plane projection angle.

The naming convention for the frontal plane projection angle differs in the litterature, the measure has also been named the frontal plane knee projection angle and the frontal plane knee angle. It was originally described by McLean et. al as the frontal plane knee angle, and calculated using global coordinate positions of lower extremity joint centers.2D vectors were computed from the knee to hip centre (kh) and from the knee to ankle centre (ka). The cross product and vector norms were computed from the global coordinates, and the frontal plane projection angle was computed as:

Usage

add_frontal_plane_projection_angle(.data)

Arguments

.data

A tibble that must contain lower extremity spatial joint postions in the anatomical plane (please see project_full_body_to_AP())

Details

\Theta = aSin( |kh x ka| / |kh||ka| )


Please note that the frontal plane projection angle has been developed for 2D video analysis of motions that do not involve the height of hip joint being at the level of the knee joint of lower (e.g. single-leg-squats). Due to planar cross talk, the projected kinemtics produce high, and potentially misleading, values when the height of the hip joint approaches that of the knee joint. The frontal plane projeciton kinematics are likely only usefull for analyzing motions that do not involve deep positions of the pelvis (e.g. single-leg squats, gait etc.).
Please see examples for further detail.

Value

The tibble supplied in the .data argument with two extra columns (LFPPA and RFPPA).

Equation

eqFPPA.png

Figure

pcFPPA.png

References

McLean SG, Walker K, Ford KR, Myer GD, Hewett TE, van den Bogert AJ. Evaluation of a two dimensional analysis method as a screening and evaluation tool for anterior cruciate ligament injury. Br J Sports Med. 2005;39(6):355-62.

Harsted S, Holsgaard-Larsen A, Hestbaek L, Boyle E, Lauridsen HH. Concurrent validity of lower extremity kinematics and jump characteristics captured in pre-school children by a markerless 3D motion capture system. Chiropr Man Therap. 2019;27:39.

Willson JD, Davis IS. Utility of the frontal plane projection angle in females with patellofemoral pain. The Journal of orthopaedic and sports physical therapy. 2008;38(10):606-15.

Examples

# Prepare data
df <- data.frame(
                 LH_APR = c(10,10,10, 0,10,20),
                 LK_APR = c(10,10,10,10,10,10),
                 LA_APR = c( 0,10,20,10,10,10),
                 LH_APU = c(30,30,30,30,30,30),
                 LK_APU = c(10,10,10,10,10,10),
                 LA_APU = c( 0, 0, 0, 0, 0, 0),
                 RH_APR = c(10,10,10, 0,10,20),
                 RK_APR = c(10,10,10,10,10,10),
                 RA_APR = c( 0,10,20,10,10,10),
                 RH_APU = c(30,30,30,30,30,30),
                 RK_APU = c(10,10,10,10,10,10),
                 RA_APU = c( 0, 0, 0, 0, 0, 0))

add_frontal_plane_projection_angle(df)

# Example to view L and R FPPA
df <- mocapr::mocapr_synthetic_data
df <- dplyr::filter(df, sample == 2)
df <- add_frontal_plane_projection_angle(df)
animate_anatomical(df,
                  planes = "R",
                  return_plot = TRUE,
                  col_facets = col_fa,
                  row_facets = row_fa)+
   ggplot2::geom_text(ggplot2::aes(label = paste0("LFPPA: ", round(LFPPA, 1)),
                      x = mean(value)-15, y= max(U)+10), color = "black", size = 3)+
   ggplot2::geom_text(ggplot2::aes(label = paste0("RFPPA: ", round(RFPPA, 1)),
                      x = mean(value)+15, y= max(U)+10), color = "black", size = 3)

# Explore the planar cross talk at deep positions of the hip-joint centers.
df2 <- dplyr::filter(mocapr::mocapr_synthetic_data, sample == 2)
df2 <- add_frontal_plane_knee_angle(df2)
df2 <- add_frontal_plane_knee_deviation(df2)
df2 <- add_frontal_plane_projection_angle(df2)
animate_anatomical(df2,
                  planes = "R",
                  return_plot = TRUE,
                  col_facets = col_fa,
                  row_facets = row_fa)+
ggplot2::geom_text(ggplot2::aes(label = paste0("LFPPA: ", round(LFPPA, 1)),
                  x = mean(value)-15, y= max(U)+30), color = "black", size = 3)+
ggplot2::geom_text(ggplot2::aes(label = paste0("RFPPA: ", round(RFPPA, 1)),
                  x = mean(value)+15, y= max(U)+30), color = "black", size = 3)+
ggplot2::geom_text(ggplot2::aes(label = paste0("LFPKA: ", round(LFPKA, 1)),
                  x = mean(value)-15, y= max(U)+20), color = "black", size = 3)+
ggplot2::geom_text(ggplot2::aes(label = paste0("RFPKA: ", round(RFPKA, 1)),
                  x = mean(value)+15, y= max(U)+20), color = "black", size = 3)+
ggplot2::geom_text(ggplot2::aes(label = paste0("LFPKD: ", round(LFPKD, 1)),
                  x = mean(value)-15, y= max(U)+10), color = "black", size = 3)+
ggplot2::geom_text(ggplot2::aes(label = paste0("RFPKD: ", round(RFPKD, 1)),
                  x = mean(value)+15, y= max(U)+10), color = "black", size = 3)


steenharsted/mocapr documentation built on Feb. 1, 2024, 1:49 p.m.