四人追逐问题用rstudio实现

问题一(追逐问题):正方形ABCD的四个顶点各有一人。在某一时刻,四人同时出发以匀速v=1米/秒按顺时针方向追逐下一人,如果他们始终保持对准目标,则最终按螺旋状曲线于中心点O。试求出这种情况下每个人的行进轨迹。用rstudio软件写,并体现出蒙特卡洛模拟方法。感谢!


library(ggplot2)

# 定义初始位置和方向
positions <- data.frame(
  X = c(0, 1, 1, 0),
  Y = c(0, 0, 1, 1),
  direction = c(pi/2, pi, 3*pi/2, 0)  # 初始方向分别为向上、向左、向下、向右
)

# 定义追逐函数
chase <- function(positions) {
  n <- nrow(positions)
  new_positions <- positions
  
  for (i in 1:n) {
    # 计算当前位置和下一个位置的向量差
    dx <- positions$X[i+1] - positions$X[i]
    dy <- positions$Y[i+1] - positions$Y[i]
    
    # 计算下一个位置的方向
    new_positions$direction[i] <- atan2(dy, dx)
    
    # 计算下一个位置的坐标
    new_positions$X[i+1] <- positions$X[i] + cos(new_positions$direction[i])
    new_positions$Y[i+1] <- positions$Y[i] + sin(new_positions$direction[i])
  }
  
  return(new_positions)
}

# 追逐轨迹模拟
simulate_chase <- function(num_iterations) {
  positions_list <- list()
  positions_list[[1]] <- positions
  
  for (i in 1:num_iterations) {
    positions <- chase(positions)
    positions_list[[i+1]] <- positions
  }
  
  return(positions_list)
}

# 蒙特卡洛模拟
num_iterations <- 1000  # 模拟的迭代次数
results <- simulate_chase(num_iterations)

# 绘制轨迹图
plot_trajectory <- function(positions) {
  ggplot() +
    theme_void() +
    theme(panel.background = element_rect(fill = "white")) +
    geom_path(data = positions, aes(x = X, y = Y, group = 1), color = "blue", size = 0.5) +
    geom_point(data = positions, aes(x = X, y = Y), color = "red", size = 3) +
    ggtitle("Chasing Trajectory") +
    labs(x = "X", y = "Y")
}

# 显示模拟结果
for (i in 1:num_iterations) {
  plot_trajectory(results[[i]])
  Sys.sleep(0.1)  # 控制动画播放速度
}

参考:https://peakchen.blog.csdn.net/article/details/131596253?spm=1001.2014.3001.5502