Разделить единичный квадрат на n прямоугольников из случайно сгенерированных координат

Описание

Единичный прямоугольник имеет координаты (0,0), (0,1), (1,0) и (1,1). Случайное число для оси x и другое случайное число для оси y генерируется в диапазоне от 0 до 1. Таким образом, они составляют случайную координату.

Предположим, что случайная координата равна (M,N). Таким образом, он делит квадрат блока на 4 под прямоугольника. Давайте пометим их по часовой стрелке, как показано на этом рисунке - http://bit.ly/15TsSw6.
Чтобы определить площадь этих под прямоугольников, я использовал

void area1(double a[],double ax[],double ay[])
{
   ax[0]=M;
   ay[0]=1-N;
   a[0]= ax[0]*ay[0]; //area of first block

   ax[1]=1-M;
   ay[1]=ay[0];
   a[1]=ax[1]*ay[1]; //area of second block

   ax[2]=ax[1];
   ay[2]=N;
   a[2]=ax[2]*ay[2]; //area of third block

   ax[3]=M;
   ay[3]=N;
   a[3]=ax[3]*ay[3]; //area of fourth block

   cout<<endl;
}

Вот моя проблема:

Теперь пусть другой набор координат генерируется случайным образом. Он разделит один из этих под прямоугольников на 4 блока. Этот процесс будет продолжаться 100 раз. И каждый раз, когда случайно сгенерированные координаты разбивают прямоугольник рядом с ним на (3j+1) под прямоугольники (см. Рисунок: http://bit.ly/11xyTOb).
Как я могу рассчитать площадь под прямоугольников каждый раз?[Отредактировано]

1 ответ

Алгоритм может быть что-то вроде этого. вам понадобится рекурсивная функция count=1 в начале

void calculatearea(coordinates of 4 corners of the rectangle,count)
{
  if count < 100
  {
    calculate area of the rectangle;
    generate random numbers;
    generate corners of the 4 new rectangles;
    for each new rectangle i
    {
      calculatearea(corners of rectangle i, count+1);
    }
  }
}
Другие вопросы по тегам