es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Existe alguna forma de establecer un área máxima en un rectángulo aleatorio en Paper.js?

Estoy tratando de colocar un rectángulo de tamaño aleatorio en el centro de un lienzo de 1200×1200, con un tamaño mínimo de 200×200 y un tamaño máximo de 900×900. Sin embargo, también me gustaría establecer un área máxima (la mitad del espacio máximo de 900×900) en el rectángulo para evitar que sea un cuadrado gigante. Básicamente, quiero crear rectángulos grandes y aleatorios, o cuadrados de un área similar, pero nunca cuadrados enormes. Tengo la parte del rectángulo aleatorio funcionando, pero no estoy seguro de cómo limitar el área total.

var maxSize = new Size(700, 700); // tamaño máximo de 900×900 cuando se combina con +200 abajo
var randomSize = Size.random(); // número aleatorio entre 0 y 1
var size = (maxSize * randomSize) + 200; // crea efectivamente un tamaño mínimo de 200×200, máximo de 900×400

var box = new Rectangle(new Point(0,0), size); // crea un rectángulo en 0,0 con el tamaño establecido
box.center = (600, 600); // centra el rectángulo en 600,600
var path = new Path.Rectangle(box); // dibuja el rectángulo en la pantalla
path.fillColor = ‘#cccccc’;

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para limitar el área total del rectángulo, una manera sería calcular el área máxima permitida (es decir, la mitad del espacio máximo de 900×900) y verificar si el área del rectángulo aleatorio excede ese límite. Si lo hace, entonces ajustar el tamaño del rectángulo hasta que se encuentre dentro del límite. Aquí hay una manera de hacerlo:

    var maxArea = 0.5 * 900 * 900;  // área máxima permitida
    
    do {
      // generar tamaño aleatorio entre 200x200 y 900x900
      var maxSize = new Size(700, 700);
      var randomSize = Size.random();
      var size = (maxSize * randomSize) + 200;
    
      // verificar si el área excede el máximo permitido
      var area = size.width * size.height;
      if (area > maxArea) {
        // ajustar tamaño para que se ajuste al límite máximo de área
        var scale = Math.sqrt(maxArea / area);
        size *= scale;
      }
    } while (area > maxArea);  // repetir hasta que el área se encuentre dentro del límite
    
    var box = new Rectangle(new Point(0, 0), size);
    box.center = new Point(600, 600);
    var path = new Path.Rectangle(box);
    path.fillColor = '#cccccc';
    

    El código utiliza un bucle do-while para generar tamaños de rectángulo aleatorios hasta que el área se encuentre dentro del máximo permitido. El bucle verifica el área del rectángulo y si excede el máximo, ajusta el tamaño escalándolo proporcionalmente usando la raíz cuadrada de la relación entre el área máxima y el área actual. Esto asegura que el rectángulo resultante tenga un área similar a otros rectángulos generados por el código, pero nunca excede el área máxima permitida.

Comments are closed.