如何筛选圆心在原点的圆周上两点间短弧对应的坐标数据
筛选圆周两点间短弧上的坐标点
我们已通过以下R代码生成圆心在原点、半径为1的圆周坐标数据框Circle_Coordinates,并随机生成了圆周上两个点:
生成圆周坐标与随机点的代码
生成圆周坐标数据框
Radius <- 1 Horizontal_Coordinates <- seq(-Radius, Radius, 0.01) Positive_Vertical_Coordinates <- sqrt((Radius ^ 2) - (Horizontal_Coordinates ^ 2)) Negative_Vertical_Coordinates <- -sqrt((Radius ^ 2) - (Horizontal_Coordinates ^ 2)) Circle_Coordinates <- data.frame(Horizontal_Coordinates = c(Horizontal_Coordinates, rev(Horizontal_Coordinates), Horizontal_Coordinates[1]), Vertical_Coordinates = c(Positive_Vertical_Coordinates, rev(Negative_Vertical_Coordinates), Positive_Vertical_Coordinates[1])) plot(0, type = "n", xlim = c(-(Radius * 1.05), (Radius * 1.05)), ylim = c(-(Radius * 1.05), (Radius * 1.05)), xlab = "", ylab = "") polygon(Circle_Coordinates$Horizontal_Coordinates, Circle_Coordinates$Vertical_Coordinates)
生成圆周上随机两点
Random_Angle_1 <- runif(1, 0, (2 * pi)) Random_Angle_2 <- runif(1, 0, (2 * pi)) Point_1 <- c(cos(Random_Angle_1), sin(Random_Angle_1)) Point_2 <- c(cos(Random_Angle_2), sin(Random_Angle_2)) points(Point_1[1], Point_1[2], pch = 19, col = 2) points(Point_2[1], Point_2[2], pch = 19, col = 2)
筛选短弧上的坐标点
要筛选出两点间短弧上的点,可通过以下步骤实现:
- 计算
Circle_Coordinates中每个点对应的弧度角(转换为0到2π的范围,方便区间判断) - 根据两个随机点的角度,确定短弧对应的角度区间
- 筛选出角度落在短弧区间内的坐标点
具体代码如下:
# 为圆周坐标添加角度列(0到2π范围) Circle_Coordinates$Angle <- atan2(Circle_Coordinates$Vertical_Coordinates, Circle_Coordinates$Horizontal_Coordinates) Circle_Coordinates$Angle <- ifelse(Circle_Coordinates$Angle < 0, Circle_Coordinates$Angle + 2*pi, Circle_Coordinates$Angle) # 提取两个随机点的角度 angle1 <- Random_Angle_1 angle2 <- Random_Angle_2 # 判断短弧对应的角度区间并筛选点 angle_diff <- abs(angle1 - angle2) if (angle_diff > pi) { # 短弧跨越2π/0点 if (angle1 < angle2) { short_arc_points <- subset(Circle_Coordinates, Angle >= angle2 | Angle <= angle1) } else { short_arc_points <- subset(Circle_Coordinates, Angle >= angle1 | Angle <= angle2) } } else { # 短弧为两个角度之间的连续区间 min_angle <- min(angle1, angle2) max_angle <- max(angle1, angle2) short_arc_points <- subset(Circle_Coordinates, Angle >= min_angle & Angle <= max_angle) }
验证结果
可通过以下代码绘制短弧,验证筛选结果:
plot(0, type = "n", xlim = c(-(Radius * 1.05), (Radius * 1.05)), ylim = c(-(Radius * 1.05), (Radius * 1.05)), xlab = "", ylab = "") # 绘制完整圆周 polygon(Circle_Coordinates$Horizontal_Coordinates, Circle_Coordinates$Vertical_Coordinates, col = "lightgray") # 标记随机点 points(Point_1[1], Point_1[2], pch = 19, col = 2) points(Point_2[1], Point_2[2], pch = 19, col = 2) # 绘制短弧 lines(short_arc_points$Horizontal_Coordinates, short_arc_points$Vertical_Coordinates, col = "blue", lwd = 2)
内容的提问来源于stack exchange,提问作者David Moore
相关产品推荐
相关产品推荐

