Given a dataframe containing tracking information for a particle as well as a dataframe containing the spatial coordinates of one or several objects or points of interest, this function returns a dataframe containing the euclidean distance between the object(s) and the particle over the whole trajectory.
Arguments
- df
A dataframe containing the spatial coordinates x and y named "x.pos", "y.pos", respectively for a particles over a tracklet.
- obj
A dataframe containing the spatial coordinates x and y named "x.pos", "y.pos", respectively for one or several object(s) or point(s) of interest.
Value
A dataframe containing as much column as input objects (named obj_1, obj_2, ..., obj_n) and as much row as within the df argument. Each dataframe's column contains the euclidean distance between the object and the particle(s) over the trajectory.
Examples
set.seed(2023)
# generate a dummy tracklet
## start to specify some parameters to generate the tracklet
TrackL <-
100 # the length of the tracklet or a sequence to randomly sample tracklet's length
TrackDatTemp <-
trajr::TrajGenerate(sample(TrackL, 1), random = TRUE, fps = 1)
TrackDat <- MoveR::trackletsClass(list(
data.frame(
x.pos = TrackDatTemp[["x"]] - min(TrackDatTemp[["x"]]),
y.pos = TrackDatTemp[["y"]] - min(TrackDatTemp[["y"]]),
frame = TrackDatTemp[["time"]]
)
))
# generate x and y coordinates for two objects located close to the particle trajectory
Objn <- 2 # the number of object to simulate
obj <- do.call("rbind", lapply(seq(Objn), function(i)
data.frame(
x.pos = sample(min(TrackDat[[1]][["x.pos"]]):max(TrackDat[[1]][["x.pos"]]), 1),
y.pos = sample(min(TrackDat[[1]][["y.pos"]]):max(TrackDat[[1]][["y.pos"]]), 1)
)))
# draw the trajectory and the objects (red dots)
MoveR::drawTracklets(TrackDat,
timeCol = "frame",
add2It = list(
points(
obj[["x.pos"]],
obj[["y.pos"]],
pch = 19,
cex = 2.2,
col = adjustcolor("red", alpha = 0.2)
),
text(obj[["x.pos"]],
obj[["y.pos"]],
rownames(obj),
cex = 0.6,
col = "firebrick")
))
# compute the euclidean distance between the objects and each points of the particle's trajectory
DistList <- MoveR::dist2Pt(TrackDat[[1]], obj)
# represent the distance on the plot for a random points (62)
timePt = 60
for (i in seq(2)) {
segments(
x0 = TrackDat[[1]][["x.pos"]][timePt],
y0 = TrackDat[[1]][["y.pos"]][timePt],
x1 = obj[["x.pos"]][i],
y1 = obj[["y.pos"]][i]
)
text((TrackDat[[1]][["x.pos"]][timePt] + obj[["x.pos"]][i]) / 2 + 2.5,
(TrackDat[[1]][["y.pos"]][timePt] + obj[["y.pos"]][i]) / 2,
round(DistList[timePt, i], digits = 1),
cex = 0.6,
col = "black"
)
}