问题一(追逐问题):正方形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