Как написать трехмерное изображение из матрицы 3х3, написанной на фортране 90? - PullRequest
2 голосов
/ 13 февраля 2020

Я пытаюсь написать трехмерное изображение на фортране 90.

Код объекта, который я хочу на изображении:

Вот код куб в фортране:

       PROGRAM myimage
       integer xmax,ymax,zmax
       parameter (xmax=10,ymax=10,zmax=10)
       INTEGER mytable(1:xmax,1:ymax,1:zmax)

       do 1 i1=1,xmax
       do 2 i2=1,ymax
       do 3 i3=1,zmax
           mytable(i1,i2,i3)=0
           if ((i1.ge.3).and.(i1.le.6).and.(i2.ge.3).and.(i2.le.6).and.(i3.ge.3).and.(i3.le.6)) then 
           mytable(i1,i2,i3)=1
           endif
    3  continue
    2  continue
    1  continue

       end

Тип изображения, которое я хотел бы получить:

Тип изображения, которое я хочу, выглядит следующим образом:

enter image description here

Куб был бы моими пикселями mytable=1, а вокруг него были бы пиксели: mytable=0

Что я пробовал :

Сначала я попытался написать код для создания изображения непосредственно в фортране, но оказалось, что выпущенное изображение не было 3D-изображением, как я хотел (см. Приложение 1).

Вопрос:

Не могли бы вы объяснить, как просмотреть этот тип объекта в 3D, пожалуйста?

Например, следуя комментарию Владимира F, я скачал Paraview . Я нашел этот вопрос , который очень похож на то, где я стою сейчас.

Но я не понимаю, что именно мне нужно записать в файл, если я решу записать его в формате UCD. Я не нашел объяснений по inte rnet и ссылка, приведенная в вопросе там не работает.

Приложение 1:

Вот код для 2D-изображения и для 3D-изображения, которое я пытался кодировать.

Сначала я написал 2D-изображение, которое работает. Я пытался обобщить это в 3D. Я хотел бы посмотреть объект, где mytable=1 в 3D.

       subroutine image2d(mytable,xmax,ymax,zmax)
       integer xmax,ymax,zmax,mytable(1:xmax,1:ymax,1:zmax)
       character*15 fname

       WRITE(fname,'(a)')'myimage2d.ppm' 
           open (100,file=fname,form='formatted')
           write(100,'(a)') 'P3'
           write(100,*) '#'
           write(100,*) xmax,ymax
           write(100,*) 2

       do 10 i10=1,xmax
       do 20 i20=1,ymax

                if (mytable(i10,i20,5).eq.0) then
                write(100,*) '2 2 2'
                else if (mytable(i10,i20,5).eq.1) then
                write(100,*) '0 0 0'
                end if
20   continue
10   continue

       end

       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

       subroutine image3d(mytable,xmax,ymax,zmax)
       integer xmax,ymax,zmax,mytable(1:xmax,1:ymax,1:zmax)
       character*15 fname

       WRITE(fname,'(a)')'myimage3d.ppm' 
           open (200,file=fname,form='formatted')
           write(200,'(a)') 'P3'
           write(200,*) '#'
           write(200,*) xmax,ymax,zmax
           write(200,*) 3

       do 11 i10=1,xmax
       do 21 i20=1,ymax
       do 31 i30=1,ymax
                if (mytable(i10,i20,i30).eq.0) then
                write(200,*) '2 2 2'
                else if (mytable(i10,i20,i30).eq.1) then
                write(200,*) '0 1 2'
                end if
31   continue
21   continue
11   continue          

           end
...