Autor Tema: Lograr que puntos aparezcan en un circulo.

0 Usuarios y 1 Visitante están viendo este tema.

18 Abril, 2025, 09:38 am
Leído 1956 veces

Tachikomaia

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,297
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Tiene 45*45 pixeles y usé este código:
Código: [Seleccionar]
Imagen = 0;
do {
Imagen++;
Name = "Imagen"+Imagen;
Meteor.attachMovie("sCirculo", Name, Imagen);
Name = "Meteor."+Name;
setProperty (Name, _x, Math.random()*44-22);
setProperty (Name, _y, Math.random()*44-22);
} while (Imagen < 50);

Quedó así en un caso:


¿Por qué quedan afuera si la imagen es de 45*45 y los resultados son de -22 a 22 desde el centro? 45/2 es más de 22, así que no debería haber problema, pensé, pero es un circulo, así que desde el centro exactamente hacia arriba, abajo, derecha o izquierda, va a tener 45 pixeles, pero por ejemplo lo que sería la posición 22, 22, no es ocupada por el circulo, porque no es un cuadrado, no es que su área sea 45*45...

Espero se entienda. Quisiera un código para que los puntos se inserten en cualquier parte del circulo, no afuera. En el borde tampoco ni muy cerca, pero eso lo acomodo yo luego reduciendo el área válida.

18 Abril, 2025, 06:59 pm
Respuesta #1

Abdulai

  • Moderador Global
  • Mensajes: 3,044
  • País: ar
  • Karma: +0/-0
  • Sexo: Masculino
Los puntos que cumplan  \( x^2+y^2 > R^2 \)  estarán fuera del círculo --> los descartamos antes de setProperty

Código: [Seleccionar]
Imagen = 0;
do {
    Imagen++;
    Name = "Imagen"+Imagen;
    Meteor.attachMovie("sCirculo", Name, Imagen);
    Name = "Meteor."+Name;
   
    do {
        u = Math.random()*44 - 22;     // Rango: [-22, 22]
        v = Math.random()*44 - 22;     // Rango: [-22, 22]
    } while (u*u + v*v > 22*22); // Repetir si está fuera del círculo
   
    setProperty (Name, _x, u);
    setProperty (Name, _y, v);
} while (Imagen < 50);