Единичный прямоугольник имеет координаты (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 в начале
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);
}
}
}
Других решений пока нет …