Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

136
Vistas
La colisión círculo/círculo se dispara antes de que los círculos colisionen

He configurado un programa p5.js simple donde se dibujan dos círculos en la pantalla, la deposición de uno de los cuales está determinada por el cursor, y cuando entran en contacto, el inmóvil cambia de color. El código es el siguiente:

 let r1 = 70; let r2 = 90; let x2; let y2; function setup() { createCanvas(400, 400); x2 = width/2; y2 = height/2; } function draw() { background(220); circle(mouseX, mouseY, r1); let distance = sqrt((x2 - mouseX)*(x2 - mouseX) + (y2 - mouseY)*(y2 - mouseY)); push(); if (distance <= r1 + r2) { fill(56, 45, 78); } circle(x2, y2, r2); pop(); }

La forma en que estoy haciendo la detección de colisión es comparando la distancia entre los dos círculos con la suma de sus radios. Si el primero es inferior o igual al segundo, normalmente debería registrarse como una colisión y cambiar el color del círculo inmóvil. Sin embargo, eso no es lo que sucede:

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

Como puede ver, la detección de colisiones se activa mucho antes de que haya contacto, y no tengo idea de por qué.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

El tercer argumento de la función circle es el diámetro, no el radio. Multiplica el radio por 2.

Utilice la función dist para calcular la distancia entre 2 puntos.

 let r1 = 70; let r2 = 90; let x2; let y2; function setup() { createCanvas(400, 400); x2 = width/2; y2 = height/2; } function draw() { let distance = dist(mouseX, mouseY, x2, y2); background(220); circle(mouseX, mouseY, r1*2); push(); if (distance <= r1 + r2) { fill(56, 45, 78); } circle(x2, y2, r2*2); pop(); }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.3.1/p5.min.js"></script>

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda