尝试在Java中创建旋转微调器滚轮

尝试在Java中创建旋转微调器滚轮,java,processing,Java,Processing,我目前正在做一个小项目,我正在创建一个简单的棋盘游戏,比如纺车。用户将按下按钮,微调器将随机落在四种颜色(红色、绿色、黄色或蓝色)之一上。我遇到的麻烦是让旋转器旋转一圈(或顺时针),然后在四个正方形中的一个任意位置随机降落 和源代码: void setup() { // this is run once size(800, 800); } void draw() { // this is run repeatedly background(255); strokeWeight(

我目前正在做一个小项目,我正在创建一个简单的棋盘游戏,比如纺车。用户将按下按钮,微调器将随机落在四种颜色(红色、绿色、黄色或蓝色)之一上。我遇到的麻烦是让旋转器旋转一圈(或顺时针),然后在四个正方形中的一个任意位置随机降落

和源代码:

void setup() { // this is run once
  size(800, 800);
}

void draw() { //  this is run repeatedly
  background(255);
  strokeWeight(2);
  fill(255,0,0);
  rect(100,100,300,300);
  fill(0,96,255);
  rect(100, 400, 300, 300);
  fill(255,240,0);
  rect(400, 100, 300, 300);
  fill(0,255,0);
  rect(400, 400, 300, 300);

  // how to rotate this part like a spinner?
  strokeWeight(20);
  line(400, 400, 400, 600);
}
然后,我需要弄清楚如何确定微调器落在哪个颜色上,并打印出文本,上面写着“您已落在[微调器落在的颜色]”。我很难理解旋转后确定坐标的矩阵方面


我在Processing development platform中用Java编写代码。

不幸的是,在编程中使用圆和坐标可能有点棘手。你必须在极坐标和笛卡尔坐标之间做一些转换。

因此,您需要首先生成一个介于0和2π(弧度)之间的随机数,这在处理过程中很容易做到:
float rnd=random(0,两个π)

接下来,我们将其转换为法线坐标:

 float x = 200 * cos(rnd);
 float y = 200 * sin(rnd);
最后画线:
线(400,400,x+400,y+400)


编辑:忘记处理有
rotate()
,这将是一个比这更糟糕的解决方案

不幸的是,在编程中同时处理圆和坐标可能有点棘手。你必须在极坐标和笛卡尔坐标之间做一些转换。

因此,您需要首先生成一个介于0和2π(弧度)之间的随机数,这在处理过程中很容易做到:
float rnd=random(0,两个π)

接下来,我们将其转换为法线坐标:

 float x = 200 * cos(rnd);
 float y = 200 * sin(rnd);
最后画线:
线(400,400,x+400,y+400)


编辑:忘记处理有
rotate()
,这将是一个比这更糟糕的解决方案

您的第一步将是了解隔离到一个形状的旋转,而不旋转整个草图。有一种代码模式涉及到
pushMatrix
popMatrix
translate
,以及
rotate
——所有这些都是相互关联的

// inside draw
pushMatrix();
translate(400, 400);
rotate(radians(rotation));
line(0, 0, 100, 100);
popMatrix();

rotation += 5;
translate
功能将原点移动到新位置,在本例中为400400。原点移动后绘制的任何形状都是相对于原点移动的。这就是为什么在新原点(实际上是400400)的0,0处绘制直线的原因。函数
pushMatrix
popMatrix
隔离此代码,以免影响草图的其余部分。这是一个很好的技巧,可以在草图中创建独立的旋转(以及任何其他真正的旋转),而不必拿出数学公式来抵消所有的运动。想象五个旋转器以不同的速度和方向旋转

对于逐渐变慢的微调器,我引入了一个
步长
变量,然后慢慢减小它,并从旋转中减去它,直到旋转达到零,微调器停止

// still inside draw
if (stepSize > 0) {
  rotation += stepSize;
  stepSize -= 0.05; // play around with this value
}
这里有一个演示程序,将所有的部分放在一起,以实现一个旋转器,该旋转器将移动一段时间,然后停止

float rotation = 1, stepSize = 10;

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

void draw() {
  background(255);
  strokeWeight(2);
  fill(255, 0, 0);
  rect(100, 100, 300, 300);
  fill(0, 96, 255);
  rect(100, 400, 300, 300);
  fill(255, 240, 0);
  rect(400, 100, 300, 300);
  fill(0, 255, 0);
  rect(400, 400, 300, 300);
  strokeWeight(20);

  pushMatrix();
  translate(400, 400);
  rotate(radians(rotation));
  line(0, 0, 100, 100);
  popMatrix();

  if (stepSize > 0) {
    rotation += stepSize;
    stepSize -= 0.05; // play around with this value
  }
}

void mousePressed() {
  stepSize = random(5,15); // try adjusting these values
}

您的第一步将是了解在不旋转整个草图的情况下隔离到一个形状的旋转。有一种代码模式涉及到
pushMatrix
popMatrix
translate
,以及
rotate
——所有这些都是相互关联的

// inside draw
pushMatrix();
translate(400, 400);
rotate(radians(rotation));
line(0, 0, 100, 100);
popMatrix();

rotation += 5;
translate
功能将原点移动到新位置,在本例中为400400。原点移动后绘制的任何形状都是相对于原点移动的。这就是为什么在新原点(实际上是400400)的0,0处绘制直线的原因。函数
pushMatrix
popMatrix
隔离此代码,以免影响草图的其余部分。这是一个很好的技巧,可以在草图中创建独立的旋转(以及任何其他真正的旋转),而不必拿出数学公式来抵消所有的运动。想象五个旋转器以不同的速度和方向旋转

对于逐渐变慢的微调器,我引入了一个
步长
变量,然后慢慢减小它,并从旋转中减去它,直到旋转达到零,微调器停止

// still inside draw
if (stepSize > 0) {
  rotation += stepSize;
  stepSize -= 0.05; // play around with this value
}
这里有一个演示程序,将所有的部分放在一起,以实现一个旋转器,该旋转器将移动一段时间,然后停止

float rotation = 1, stepSize = 10;

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

void draw() {
  background(255);
  strokeWeight(2);
  fill(255, 0, 0);
  rect(100, 100, 300, 300);
  fill(0, 96, 255);
  rect(100, 400, 300, 300);
  fill(255, 240, 0);
  rect(400, 100, 300, 300);
  fill(0, 255, 0);
  rect(400, 400, 300, 300);
  strokeWeight(20);

  pushMatrix();
  translate(400, 400);
  rotate(radians(rotation));
  line(0, 0, 100, 100);
  popMatrix();

  if (stepSize > 0) {
    rotation += stepSize;
    stepSize -= 0.05; // play around with this value
  }
}

void mousePressed() {
  stepSize = random(5,15); // try adjusting these values
}

“r”的值是什么意思?我在任何地方都看不到有r的变量,因为它的名称令人担忧-我重写了几次,最后在代码中将
r
的值更改为
rotation
。这是push/pop矩阵中使用的当前旋转的值。我知道了,但是你会在哪里减少旋转?在循环中?我使用步长变量,而不是固定的旋转速度和停止限制计数器,并允许旋转减速到停止。请参阅上面更新的演示。您所说的“r”值是什么意思?我在任何地方都看不到有r的变量,因为它的名称令人担忧-我重写了几次,最后在代码中将
r
的值更改为
rotation
。这是push/pop矩阵中使用的当前旋转的值。我知道了,但是你会在哪里减少旋转?在循环中?我使用步长变量,而不是固定的旋转速度和停止限制计数器,并允许旋转减速到停止。请参阅上面更新的演示。关于确定微调器落在何处的问题的最后一部分可能是最复杂的步骤,至少在我提出的解决方案中是这样。我现在无法解决这个问题,但这里有一篇文章探讨了这个想法:关于确定旋转器落在何处的问题的最后一部分可能是最复杂的步骤,至少在我提出的解决方案中是这样。我现在无法解决这个问题,但这里有一篇文章探讨了这个想法: