Click here to Skip to main content
15,881,812 members
Please Sign up or sign in to vote.
3.00/5 (1 vote)
See more:
I would like to split a rectangle in cells. In each cell it should be create a random coordinate (y, z). Unfortunately I can not attache pictures. Please see the pictures and my same question in another forum:
http://stackoverflow.com/questions/25103098/split-rectangle-in-cells-random-coordinates-store-in-array-in-fortran[^]


The wide and height of the rectangle are known (initialW / initalH). The size of the cells are calculated (dy / dz). The numbers, in how many cells the rectangle to be part, are known. (numberCellsY / numberCellsZ)

Here my Code in Fortran to split the rectangle in Cells:
Python
yRVEMin = 0.0
yRVEMax = initialW
dy = ( yRVEMax - yRVEMin ) / numberCellsY         

zRVEMin = 0.0
zRVEMax = initialH
dz = ( zRVEMax - zRVEMin ) / numberCellsZ


do i = 1, numberCellsY 
   yMin(i) = (i-1)*dy
   yMax(i) = i*dy
end do

do j = 1, numberCellsZ 
    zMin(j) = (j-1)*dz
    zMax(j) = j*dz
end do


Now I would like to produce a random coordinate in each cell. The problem for me is, to store the coodinates in an array. It does not necessarily all be stored in one array, but as least as possible.

To fill the cells with coordinates it should start at the bottom left cell, go through the rows (y-direction), and after the last cell (numberCellsY) jump a column higher (z-dicrection) and start again by the first cell of the new row at left side. That should be made so long until a prescribed number (nfibers) is reached.

Here a deplorable try to do it:
Python
call random_seed
  l = 0
    do k = 1 , nfibers
        if (l < numberCellsY) then
            l = l + 1
        else
            l = 1
        end if
        call random_number(y) 
        fiberCoordY(k) = yMin(l) + y * (yMax(l) - yMin(l))
    end do

n = 0
    do m = 1 , nfibers
        if (n < numberCellsZ) then
            n = n + 1
        else
           n = 1
        end if
        call random_number(z) 
       fiberCoordZ(m) = zMin(n) + z * (zMax(n) - zMin(n))
    end do


The output is not what I want! fiberCoordZ should be stay on (zMin(1) / zMax(1) as long as numberCellsY-steps are reached.

The output for following settings:
nfibers = 9 
numberCellsY = 3 
numberCellsZ = 3 
initialW = 9.0 
initialH = 9.0


My random output for fiberCoordY is:
1.768946    3.362770     8.667685     1.898700    5.796713   8.770239       2.463412       3.546694    7.074708


and for fiberCoordZ is:
2.234807    5.213032     6.762228     2.948657    5.937295    8.649946      0.6795220     4.340364    8.352566


In this case the first 3 numbers of fiberCoordz should have a value between 0.0 and 3.0. Than number 4 - 6 a value between 3.0 and 6.0. And number 7 - 9 a value bewtween 6.0 - 9.0.

How can I solve this? If somebody has a solution with a better approach, please post it!

Thanks
Posted
Updated 3-Aug-14 0:44am
v3

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900