# Ayuda! Como hacer que una figura tome una nueva posición aleatoria?

**URL:** https://discourse.processing.org/t/ayuda-como-hacer-que-una-figura-tome-una-nueva-posicion-aleatoria/1587
**Category:** Beginners
**Created:** [July 8, 2018, 8:14am UTC](https://discourse.processing.org/t/ayuda-como-hacer-que-una-figura-tome-una-nueva-posicion-aleatoria/1587 "2018-07-08T08:14:58Z")
**Posts on this page:** 12
**Page:** 1

<div class="post-metadata">

### Author: ![lu4425](https://avatars.discourse-cdn.com/v4/letter/l/f0a364/32.png) [@lu4425](https://discourse.processing.org/u/lu4425)
#### Post date: [July 8, 2018, 8:14am UTC](https://discourse.processing.org/t/ayuda-como-hacer-que-una-figura-tome-una-nueva-posicion-aleatoria/1587/1 "2018-07-08T08:14:58Z")

</div>

Hola! Si alguien me puede ayudar se lo agradecería mucho!  
Tengo que dibujar dos figuras (circulo de 40 de diámetro y cuadrado de 30 x 30), y necesito que al clickear sobre alguna de estas figuras, pasen a tener un nueva ubicación aleatoria.

Hice esto pero no funciona porque algo esta mal y ya no me doy cuenta que es lo que falta y cual es el error!

float recX, recY, cirX, cirY;

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

void draw() {  
background (0);

recX = random (width);  
recY = random (height);  
cirX = random (width);  
cirY = random (height);  
}

void mousePressed () {

if (dist(mouseX, mouseY, cirX, cirY)\<20) {  
cirX = random (width);  
cirY = random (height);  
}

if {  
mouseX \> recY &&;  
mouseX \< +30 &&;  
mouseY \> recY &&;  
mouseY \< recY +30;  
}  
}

---

<div class="post-metadata">

### Author: ![GoToLoop](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.processing.org/gotoloop/32/86_2.png) [@GoToLoop](https://discourse.processing.org/u/GoToLoop)
#### Post date: [July 8, 2018, 11:40am UTC](https://discourse.processing.org/t/ayuda-como-hacer-que-una-figura-tome-una-nueva-posicion-aleatoria/1587/2 "2018-07-08T11:40:52Z")

</div>

[http://Studio.ProcessingTogether.com/sp/pad/export/ro.9NGjx94YMTtlu](http://Studio.ProcessingTogether.com/sp/pad/export/ro.9NGjx94YMTtlu)

---

<div class="post-metadata">

### Author: ![DogeMastr](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.processing.org/dogemastr/32/689_2.png) [@DogeMastr](https://discourse.processing.org/u/DogeMastr)
#### Post date: [July 8, 2018, 11:42am UTC](https://discourse.processing.org/t/ayuda-como-hacer-que-una-figura-tome-una-nueva-posicion-aleatoria/1587/3 "2018-07-08T11:42:15Z")

</div>

¡Hola! Estoy usando Google translate para que mi español sea malo. ¿Dónde dibujas el círculo y el rectángulo? El sorteo nulo pasa 60 (si no me equivoco) por segundo, por lo que le estarías dando al círculo y al rectángulo una nueva posición 60 veces por segundo, pero como no estás dibujando el círculo y el rectángulo que deseas verlos.  
Puedes dibujar un rectángulo como este:  
`rect (X, Y, Width, height);`  
y un círculo como este:  
`elipse (X, Y, Width, Height);`

Editar: También tu último dosificador de declaración if tiene un argumento para que no se ejecute  
su declaración if debería verse así:

```auto
if (mouseX> recY && mouseX <+30 && mouseY> recY && mouseY <recY +30) {
// ejecuta su código aquí
}

```

* * *

Doge

---

<div class="post-metadata">

### Author: ![lu4425](https://avatars.discourse-cdn.com/v4/letter/l/f0a364/32.png) [@lu4425](https://discourse.processing.org/u/lu4425)
#### Post date: [July 8, 2018, 7:08pm UTC](https://discourse.processing.org/t/ayuda-como-hacer-que-una-figura-tome-una-nueva-posicion-aleatoria/1587/4 "2018-07-08T19:08:19Z")

</div>

Muchas gracias por responder!  
ya dibuje el circulo y el cuadrado. Pero el aleatorio no esta funcionando. Que es lo que estará mal?  
Se ve así:

 ![1](https://canada1.discourse-cdn.com/flex036/uploads/processingfoundation1/original/1X/410e66218b57aeefd3453d684c70c7516d8b1f33.jpg)

---

<div class="post-metadata">

### Author: ![DogeMastr](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.processing.org/dogemastr/32/689_2.png) [@DogeMastr](https://discourse.processing.org/u/DogeMastr)
#### Post date: [July 8, 2018, 7:15pm UTC](https://discourse.processing.org/t/ayuda-como-hacer-que-una-figura-tome-una-nueva-posicion-aleatoria/1587/5 "2018-07-08T19:15:35Z")

</div>

solo los estás dibujando una vez, `void setup()`. La configuración de vacío solo se ejecuta cuando el programa se abre por primera vez, así que si quieres dibujar el círculo y el rectángulo de nuevo, te sugiero ponerlos en `mousePressed()`  
para obtener más información, eche un vistazo a la referencia para el sorteo y la configuración de vacío  
[https://processing.org/reference/draw\_.html](https://processing.org/reference/draw_.html)

[https://processing.org/reference/setup\_.html](https://processing.org/reference/setup_.html)

---

<div class="post-metadata">

### Author: ![kfrajer](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.processing.org/kfrajer/32/196_2.png) [@kfrajer](https://discourse.processing.org/u/kfrajer)
#### Post date: [July 8, 2018, 11:07pm UTC](https://discourse.processing.org/t/ayuda-como-hacer-que-una-figura-tome-una-nueva-posicion-aleatoria/1587/6 "2018-07-08T23:07:47Z")

</div>

@lu4425 Tienes acceso a una referencia de Processing en español? La verdad, no se si hay version traducida. El caso es que tienes que mirar la definicion de `setup()` y `draw()` para que puedes entender como funciona Processing. Estos son dos funciones fundamentales. Si te animas al ingles, puedes chequear la referencia:

> [setup() / Reference / Processing.org](https://processing.org/reference/setup_.html)  
> [draw() / Reference / Processing.org](https://processing.org/reference/draw_.html)

El caso es, como @DogeMastr ha explicado, tu tienes que llamar la funcion respectiva, `rect()` o `ellipse()`, despues de que assignas un valor aleatorio a tu variable.

En resumen: setup es una function que es llamada una sola vez y es ejecutada antes de draw(). Despues de que setup termina de ejecutar, draw es ejecutado 30 veces por segundo. Tu puedes dibujar tu rect y ellipse o dentro de `draw()` o dentro de `mousePressed()`. Estas dos funciones funcionan de una manera distinta, pero lo que importa es que cualquiera funciona para este reto.

Una cosa: No generes valores aleatorios en draw.

Hechale un vistazo al codigo que genere.

Suerte,

Kf

N.B. Para formatera el codigo en el foro, despues de formatear el codigo en el preprocesor de Processing (`ctrl+t`) para arreglar los espacios y las tabulaciones del código, copialo y pégalo aqui en el foro. Despues selecciona el código y le das click al buton con el siguiente símbolo: `</>`. Eso permite que tu codigo tengo un formato adecuado en este foro.

```java
final int LADO_RECT=30; //unidades de pixeles
final int DIAMETRO=100; //unidades de pixeles

float recX, recY, cirX, cirY;

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

  recX = random (width);
  recY = random (height);
  cirX = random (width);
  cirY = random (height);

  noStroke(); //No dibujar el borde de las figuras
  fill(255, 0, 0); //Lenar las figuras de color rojo
}

void draw() {
  background (0); //El fondo es negro

  rect(recX, recY, LADO_RECT, LADO_RECT);
  ellipse(cirX, cirY, DIAMETRO, DIAMETRO);
}

void mousePressed () {

  if (dist(mouseX, mouseY, cirX, cirY)<DIAMETRO/2) {
    cirX = random (width);
    cirY = random (height);
  }

  //ATENCION: El siguiente bloque fue modificado PERO esta incompleto. 
  //Se te deja como tarea completar esta parte
  if (
    mouseX > recY &&
    mouseX < +30 &&
    mouseY > recY &&
    mouseY < recY +30
    ) {
  }
}

```

---

<div class="post-metadata">

### Author: ![GoToLoop](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.processing.org/gotoloop/32/86_2.png) [@GoToLoop](https://discourse.processing.org/u/GoToLoop)
#### Post date: [July 9, 2018, 12:53am UTC](https://discourse.processing.org/t/ayuda-como-hacer-que-una-figura-tome-una-nueva-posicion-aleatoria/1587/7 "2018-07-09T00:53:01Z")

</div>

> [@kfrajer](#):
>
> … **draw()** es ejecutado 30 veces por segundo.

1 of the 1st things I’ve learned in Processing is that its default **frameRate()** is 60 FPS: 😌

- [frameRate() / Reference / Processing.org](https://processing.org/reference/frameRate_.html)

> The default rate is 60 frames per second.

---

<div class="post-metadata">

### Author: ![lu4425](https://avatars.discourse-cdn.com/v4/letter/l/f0a364/32.png) [@lu4425](https://discourse.processing.org/u/lu4425)
#### Post date: [July 9, 2018, 2:38am UTC](https://discourse.processing.org/t/ayuda-como-hacer-que-una-figura-tome-una-nueva-posicion-aleatoria/1587/8 "2018-07-09T02:38:28Z")

</div>

ok, muchas gracias!!

---

<div class="post-metadata">

### Author: ![lu4425](https://avatars.discourse-cdn.com/v4/letter/l/f0a364/32.png) [@lu4425](https://discourse.processing.org/u/lu4425)
#### Post date: [July 9, 2018, 2:55am UTC](https://discourse.processing.org/t/ayuda-como-hacer-que-una-figura-tome-una-nueva-posicion-aleatoria/1587/10 "2018-07-09T02:55:54Z")

</div>

¡Muchas gracias! Si, ya lo modifique, pero de todas maneras no funciona el aleatorio de las figuras, porque evidentemente algo estoy aplicando mal. Cuando dibujo el aleatorio del cuadrado en donde deberia ir, no puedo ejecutar el aleatorio de las dos figuras. Ya no encuentro el error. 😖😕

---

<div class="post-metadata">

### Author: ![kfrajer](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.processing.org/kfrajer/32/196_2.png) [@kfrajer](https://discourse.processing.org/u/kfrajer)
#### Post date: [July 9, 2018, 5:15am UTC](https://discourse.processing.org/t/ayuda-como-hacer-que-una-figura-tome-una-nueva-posicion-aleatoria/1587/11 "2018-07-09T05:15:28Z")

</div>

Por fa, muestra tu código. Copia y pegalo aqui, formatealo.

Kf

---

<div class="post-metadata">

### Author: ![lu4425](https://avatars.discourse-cdn.com/v4/letter/l/f0a364/32.png) [@lu4425](https://discourse.processing.org/u/lu4425)
#### Post date: [July 9, 2018, 8:10am UTC](https://discourse.processing.org/t/ayuda-como-hacer-que-una-figura-tome-una-nueva-posicion-aleatoria/1587/12 "2018-07-09T08:10:57Z")

</div>

Pude solucionarlo de la siguiente manera. No sé si sera la manera correcta de hacerlo pero ahora funciona!  
Muchas gracias por la ayuda!!  
El código quedó así:

```auto
int cuadrado=30; 
int diametro=40; 
float recX, recY, cirX, cirY;

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

  recX = random (width);
  recY = random (height);
  cirX = random (width);
  cirY = random (height);

  noStroke();  
  fill(255, 0, 0);
}

void draw() {
  background (0); 
  rect(recX, recY, cuadrado, cuadrado);
  ellipse(cirX, cirY, diametro, diametro);
}

void mousePressed () {

  if (dist(mouseX, mouseY, cirX, cirY)<diametro/2) {
    cirX = random (width);
    cirY = random (height);
  }
  if (dist(mouseX, mouseY, recX, recY)<cuadrado*2) {
    recX = random (width);
    recY = random (height);
  }
}

```

---

<div class="post-metadata">

### Author: ![Manuel](https://avatars.discourse-cdn.com/v4/letter/m/67e7ee/32.png) [@Manuel](https://discourse.processing.org/u/Manuel)
#### Post date: [July 9, 2018, 10:00am UTC](https://discourse.processing.org/t/ayuda-como-hacer-que-una-figura-tome-una-nueva-posicion-aleatoria/1587/13 "2018-07-09T10:00:58Z")

</div>

todo lo que escribes dentro del setup() se ejecuta una única vez, por lo que la posición de tus figuras sólo cambia cuando cierras y ejecutas de nuevo el sketch. Si quieres que la posición cambie de forma dinámica tendrás que añadir código dentro de draw() para actualizar las variables que definen su posición cuando lo estimes oportuno, o en los métodos mousePressed o keyPressed tal y cómo has hecho 😉
