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

如何在R语言中绘制原始向量和旋转后向量?是否需要使用par函数

R语言同画布绘制原始向量与旋转后向量方案

一、先修正你的旋转函数bug

你提供的代码存在3处明显错误,会导致无法得到正确的旋转结果:

  • 变量名冲突:输入参数old_vector被你用来接收旋转矩阵,直接覆盖了输入的原始向量值
  • 旋转矩阵公式错误:二维向量逆时针旋转a弧度的正交矩阵应为matrix(c(cos(a), sin(a), -sin(a), cos(a)), nrow=2),你写的矩阵实际上是斜向反射矩阵
  • 语法错误:矩阵乘法处的old vector存在空格,属于无效变量名

修正后的函数代码如下:

rotate_vector <- function(a, old_vector){
  # 输入参数:
  # a: 逆时针旋转的弧度值
  # old_vector: 待旋转的二维向量,长度为2的数值向量或2行1列的矩阵
  rotate_mat <- matrix(c(cos(a), sin(a), -sin(a), cos(a)), nrow = 2)
  rotated_vector <- rotate_mat %*% old_vector
  return(as.vector(rotated_vector))
}

二、绘图不需要调用par函数

par函数一般用于调整绘图全局参数、划分多子图布局,你仅需要在单张画布上绘制两个向量,直接用基础绘图函数叠加图层即可,不需要调用par。

完整绘图示例代码如下:

# 1. 定义原始向量、旋转角度
old_v <- c(2, 1)
rotate_angle <- pi/3 # 逆时针旋转60度

# 2. 得到旋转后向量
new_v <- rotate_vector(rotate_angle, old_v)

# 3. 初始化画布,设置坐标轴范围能容纳两个向量
x_limit <- range(c(0, old_v[1], new_v[1]))
y_limit <- range(c(0, old_v[2], new_v[2]))
plot(0, 0, xlim = x_limit, ylim = y_limit, 
     xlab = "X", ylab = "Y", main = "向量旋转效果", type = "n")
# 添加参考网格
grid()

# 4. 绘制两个向量,用颜色区分
arrows(x0 = 0, y0 = 0, x1 = old_v[1], y1 = old_v[2], 
       col = "darkblue", lwd = 2, length = 0.1)
arrows(x0 = 0, y0 = 0, x1 = new_v[1], y1 = new_v[2], 
       col = "darkred", lwd = 2, length = 0.1)

# 5. 添加图例
legend("topright", legend = c("原始向量", "旋转后向量"),
       col = c("darkblue", "darkred"), lwd = 2)

如果你确实需要调整画布边距、字体等全局绘图属性,可以额外调用par函数设置对应参数,不是必须项。

内容的提问来源于stack exchange,提问作者itchy cat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 04:18:01