Processing 滚动多边形

Processing 滚动多边形,processing,polygon,Processing,Polygon,我已经用顶点功能创建了一个多边形 现在我想滚动这个多边形,如下图所示..链接。请帮帮我 void setup() { size(400, 400); } float angle=0, yl, dx=0; int N=4, r=50; void draw() { background(-1); if (left) dx-=1; if (right) dx+=1; if (mousePressed==true)N = (int)map(mouseX, 0, width, 3,

我已经用顶点功能创建了一个多边形

现在我想滚动这个多边形,如下图所示..链接。请帮帮我

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

float angle=0, yl, dx=0;
int N=4, r=50;
void draw() {
  background(-1);
  if (left) dx-=1; 
  if (right) dx+=1;
  if (mousePressed==true)N = (int)map(mouseX, 0, width, 3, 25);
  translate(width>>1, height>>1);
  line(-width/2, 0, width/2, 0);
  float innerAngle = PI-TWO_PI/N; 
  translate(0, -r);
  rotate(PI/2);
  //------------------------------------------
  float theta  = acos(dx/r);
  float dy = r*sin(theta);
  //float dx = r*cos(theta);
  //------------------------------------------
  pushMatrix();
  translate(dx, dy);
  rotate(PI/2-theta);
  polygon(N, r);
  popMatrix();
}

void polygon(int edges, int r) {
  noFill();
  beginShape();
  for (int i=0; i<edges; i++) {
    float x = r*cos(i*TWO_PI/edges);
    float y = r*sin(i*TWO_PI/edges);
    line(0, 0, x, y);
    vertex(x, y);
    pushStyle();
    fill(0);
    text(i+1, x, y);
    popStyle();
  }
  endShape(CLOSE);
  ellipse(0, 0, 2, 2);
}

boolean  right=false, left=false;
void keyPressed() {
  if (key==CODED) {
    if (keyCode == LEFT) {
      left=true;
    }
    if (keyCode == RIGHT) {
      right=true;
    }
  }
}

void keyReleased() {
  left=false;
  right=false;
}

围绕接触地面的最右侧顶点顺时针旋转多边形,直到另一个顶点接触地面。然后围绕该顶点旋转多边形,并根据需要重复该操作

提示:旋转新顶点之前,请使多边形与地面齐平,忽略要旋转的第一个顶点。否则,旋转的顶点可能在地面上方或下方


注意:看起来并不是围绕任何特定顶点旋转它,因此可能只是围绕多边形的中心旋转它,这是可行的,但计算起来要复杂得多。

我复制了这段代码,不记得是谁。我从过程论坛上得到的。我想可能是阿姆农的密码,但不确定可能是夸克的。无论如何,这是对论坛上一个我再也找不到的问题的回答。它可能会帮助你开始。但它正在旋转一个矩形:

正方形; 无效设置{ 尺寸600、200; 平整的 正方形=新的正方形30,100,40,60,0.05; } 无效抽取{ 背景200; 第0行,正方形.y+square.h/2,宽度,正方形.y+square.h/2; square.update; 方形显示器; } 类平方{ 浮动x,y,w,h,速度,rX,rY; PVector[]p; 平方浮动x,浮动y,浮动w,浮动h,浮动速度{ 这个.x=x; 这个。y=y; 这个.w=w; 这个,h=h; 速度=速度; //角点 p=新的PVector[4]; p[0]=新PVector-w/2,-h/2; p[1]=新的pvector w/2,-h/2; p[2]=新的pvector w/2,h/2; p[3]=新PVector-w/2,h/2; } 无效更新{ //旋转角点并找到最底部的角点 PVector bott=新PVector; 对于int i=0;i bott.y{ bott=p[i]; } } //计算x值 浮动lastrX=rX; rX=x+w/2-底部x; 如果lastrX>rX{ x+=最后的rX-rX; rX+=最后的rX-rX; }//计算y值 rY=y-底部y-h/2; } //画矩形 无效显示{ pushMatrix; translaterX,rY; 开始成形; vertexp[0].x,p[0].y; vertexp[1].x,p[1].y; vertexp[2].x,p[2].y; vertexp[3].x,p[3].y; vertexp[0].x,p[0].y; 端形; popMatrix; } }
你的问题到底是什么?我不知道如何让我的多边形滚动并一起移动,就像这里一样,我之前试过这个方法,但效果不好。你能解释一下代码吗?这就是我想要的