! EUC-jp
! 文字コードはEUC-jp
! 自由形式のfortranで書いています。
! g77でコンパイルする場合は、
!g77 -ffree-form -o smv smv.f
! のようにコンパイルしてください。
! gfortran でコンパイルする場合は文字コードをutf-8にしてください。
!program daiya
implicit real*8 (a-h, o-z)
pi=2.d0*dasin(1.d0)
!r=1.d0/2.d0/pi !半径
r=5.d0/pi
!h=0.5d0 !高さ
h=5.d0
m=12!周方向分割数
n=8 !高さ方向分割数 通常は偶数
nset=(m/2+1)*(n/2+1)+(m/2+2)*n/2 !節点数
!nyou=2*m*n-m-1 !周方向(奇数のとき)
nyou=(m+1)*n !周方向(偶数のとき)
!nyou=2*m*n !要素数
       open(7,file='yousosuu.txt')
       write(7,*) nyou
       write(7,*) m,n
       close(7)

nyou2=4*(m+1)*n
      open(7,file='yousosuu2.txt')
      write(7,*) nyou2
      write(7,*) m,n
      close(7)

      th=2.d0*pi/m !ダイヤ1つぶんの中心角
dh=h/n !ダイヤ三角1段ぶんの高さ(斜めになってるから三角形の高さではない)
!
open(8,file='daiyahan11.obj')
write(8,'("3DG1")')
write(8,*) nset
do j=0,n   !高さ方向に
do i=0,m/2+1 !円周方向に半回りずつ
!xyz座標を出力
zure=th/4.d0-(-1.d0)**j*th/4.d0
   if(zure>1.d-20) then  !2段目以降の偶数段は、くぼみに節点
        if(i==0) then !くぼまないように節点
                !write(8,*) '最初の点'
         write(8,*) r*dcos(i*th),r*dsin(i*th),j*dh
        else if(i/=m/2+1) then !最初と最後を除く周上の節点
         i0=i-1
                !write(8,*) '間の点'
         write(8,*) r*dcos(i0*th+zure),r*dsin(i0*th+zure),j*dh
        else  !最後の節点
                !write(8,*) '最後の点'
         write(8,*) r*dcos(m/2*th),r*dsin(m/2*th),j*dh
        end if
   else  !1段目以降の奇数段は、従来通り、余計な節点なし 
        if(i/=m/2+1) then
                !write(8,*) '奇数段'
         write(8,*) r*dcos(i*th+zure),r*dsin(i*th+zure),j*dh
        !write(8,*) r*dcos(i*th+j*th/2.),r*dsin(i*th+j*th/2.),j*dh
        end if
   end if
end do
end do
!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
!半周ずつ逆三角形と順三角形の頂点の節点を交互に外から見て左回りに出力
do j=0,n/2-1 !高さ方向
do i=0,m/2-1 !周方向に
  !逆三角形の右上頂点、左上頂点、下頂点
  write(8,*) 3,(m+3)*j+i+1,(m+3)*j+i,(m+3)*j+i+2+m/2,' ','0xcccccc'
end do
do i=0,m/2
  !三角形の左下頂点、右下頂点、上 　　
  write(8,*) 3,(m+3)*j+i+1+m/2,(m+3)*j+i+m/2+2,(m+3)*j+i,' ','0xcccccc'
end do
do i=0,m/2-1
  !三角形の左下頂点、右下頂点、上　　
  write(8,*) 3,(m+3)*j+i+m+3,(m+3)*j+i+m+4,(m+3)*j+i+2+m/2,' ','0xcccccc'
end do
do i=0,m/2
  !逆三角形の右上頂点、左上頂点、下頂点  
  write(8,*) 3,(m+3)*j+i+m/2+2,(m+3)*j+i+1+m/2,(m+3)*j+i+m+3,' ','0xcccccc'
end do
end do
!
!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  !逆三角形の右上頂点、左上頂点、下頂点
  !write(8,*) 3,j*m+i+1,j*m+i,(j+1)*m+i,' ','0xcccccc'
  !三角形の左下頂点、右下頂点、上
  !write(8,*) 3,(j+1)*m+i,(j+1)*m+i+1,j*m+i+1,' ','0xcccccc'
  !else !周の一番最後は、開始点の頂点とくっつくように
  !write(8,*) 3,j*m,j*m+i,(j+1)*m+i,' ','0xcccccc'
  !write(8,*) 3,(j+1)*m+i,(j+1)*m,j*m,' ','0xcccccc'
write(8,'("#")') !daiya.objファイルから要素数を読み取るとき用
close(8)
!
!
end
