首页 > 解决方案 > 如何从用 fortran 90 编写的 3x3 矩阵写入 3D 图像?

问题描述

我正在尝试用 fortran 90 编写 3D 图像。

我想要在图像中的对象的代码:

这是 fortran 中的多维数据集代码:

       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

我想获得的图像类型:

我想要的图像类型是这样的:

在此处输入图像描述

立方体是我的像素 mytable=1,它周围会有像素:mytable=0

我尝试了什么:

我首先尝试编写代码直接在fortran中制作图像,但结果发现发出的图像不是我想要的3D图像(见附录1)。

问题:

你能解释一下如何在 3D 中查看这种类型的对象吗?

例如,根据 Vladimir F 的评论,我下载了 Paraview。我发现这个问题与我现在的立场非常相似。

但是如果我选择以 UCD 格式写入文件,我不明白我必须在文件中写什么。我没有在互联网上找到解释,并且问题中的链接不起作用

附录1:

这是 2D 图像和我尝试编码的 3D 图像的代码。

我首先写了一个有效的 2D 图像。我试图将其推广到 3D。我想以mytable=13D 形式查看对象。

       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

标签: image3dfortranfortran90post-processing

解决方案


推荐阅读