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

使用Java+Processing实现箭头整体随机旋转的技术问题咨询

实现Processing箭头整体旋转的方法

你需要用Processing自带的矩阵堆栈操作实现多个图形的整体变换,不需要单独旋转每个图形,具体实现逻辑如下:

核心原理

  • 调用pushMatrix()保存当前全局坐标系状态,本次后续的变换操作不会影响外部绘制逻辑
  • 先使用translate()将坐标系原点平移到箭头要放置的目标位置
  • 调用rotate()传入要旋转的弧度值,对当前坐标系做整体旋转
  • 所有箭头组成图形使用相对当前原点的坐标绘制,即可实现整体旋转效果
  • 绘制完成后调用popMatrix()恢复之前的坐标系状态

修改后的完整代码

void setup() {
  size(400, 400);
}

void draw() {
  float r = random(24, 64);
  background(255);
  drawArrow(r);
  saveFrame("dataArrow/plus####.png");
  if (frameCount == 100) {
    exit();
  }
}

void drawArrow(float r){
  float base = r * 2;
  float k = 0.5 * base;
  float rectSide = 0.5 * base;
  // 随机生成箭头放置的中心坐标
  float arrowCenterX = random(base/2 + 1, width - base/2 -1);
  float arrowCenterY = random(base/2 + 1, height - base/2 -1);
  // 随机生成0-360度的旋转角度(转成弧度制)
  float rotateAngle = random(TWO_PI);
  
  pushMatrix();
  // 先平移坐标系到箭头中心位置
  translate(arrowCenterX, arrowCenterY);
  // 整体旋转坐标系
  rotate(rotateAngle);
  
  fill(0);
  // 所有图形使用相对原点(箭头中心)的坐标绘制
  triangle(-base/2, 0, base/2, 0, 0, -k);
  rect(-rectSide/2, 0, rectSide, rectSide);
  
  popMatrix();
}

注意事项

  • 必须配对使用pushMatrix()和popMatrix(),否则会出现坐标系累计偏移、后续绘制逻辑异常的问题
  • 如果需要固定方向的旋转,可以把random(TWO_PI)替换为radians(固定角度值),例如radians(180)就是箭头朝下
  • 平移和旋转的顺序不能调换,必须先平移到目标位置再做旋转,否则箭头会偏移出屏幕可视范围

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 02:06:02