You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何筛选圆心在原点的圆周上两点间短弧对应的坐标数据

筛选圆周两点间短弧上的坐标点

我们已通过以下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)

筛选短弧上的坐标点

要筛选出两点间短弧上的点,可通过以下步骤实现:

  1. 计算Circle_Coordinates中每个点对应的弧度角(转换为0到2π的范围,方便区间判断)
  2. 根据两个随机点的角度,确定短弧对应的角度区间
  3. 筛选出角度落在短弧区间内的坐标点

具体代码如下:

# 为圆周坐标添加角度列(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 08:38:10