whitearth のすべての投稿

MATLABを用いた3次元等値面の描き方

さて, 数値計算で得られた計算データを3次元で美しく描きたくなると思います.
なると思います.
MATLABで等値面を描くと, とても綺麗になるのでおすすめです.
ということで, 描き方について紹介したいと思います.
まぁ, 手始めに楕円体ですかね.

program main
  implicit none
 
  integer(8)::na,nb,nc,intangle
  real(8)::x,y,z,V,theta
  integer(8),parameter::no=50
  real(8)::a,b,c
  real(8)::ss(1:3)

  Open(50,FILE='data.dat',STATUS='unknown')
     
     a=0.6d0
     b=1.2d0
     c=0.6d0
     
     do nc=-no,no
        write(*,*)nc+no,"/",no*2
        do na=-no,no
           do nb=-no,no
             
              ss(1)=dble(na)/dble(no)
              ss(2)=dble(nb)/dble(no)
              ss(3)=dble(nc)/dble(no)
             
              V=(b**2d0 *c**2d0 *SS(1)**2d0)+(c**2d0 *a**2d0 *SS(2)**2d0)+(a**2d0 *b**2d0 *SS(3)**2d0) !楕円体の式
             
              write(50,'(3f10.5,2f11.7)')ss(1),ss(2),ss(3),V
           end do
        end do
     end do
     
     close(50)
     
  end do
end program main

今回は, 101x101x101で計算しますが, これらの範囲は自由に変更できます.
実際に使う際は, vの式を任意の式に変更するだけです.

x, y, zの回す順番だけは, このプログラムコードに合わせて下さい.

さて, data.datができました. 次に, MATLABで読み込めるようにファイルを変換します.

program main
  implicit none
 
  integer(8)::nx,ny,nz,xx,yy,zz
  real(8),allocatable::x(:,:,:)
  real(8),allocatable::y(:,:,:)
  real(8),allocatable::z(:,:,:)
  real(8),allocatable::v(:,:,:)
 
  nx=50
  ny=50
  nz=50
 
  open(62,file="data.dat",status="old")!読み込みファイル
  open(64,file="x.txt",status="unknown")!出力ファイル
  open(65,file="y.txt",status="unknown")!出力ファイル
  open(66,file="z.txt",status="unknown")!出力ファイル
  open(67,file="v.txt",status="unknown")!出力ファイル

  allocate(x(-nx:nx,-ny:ny,-nz:nz))
  allocate(y(-nx:nx,-ny:ny,-nz:nz))
  allocate(z(-nx:nx,-ny:ny,-nz:nz))
  allocate(v(-nx:nx,-ny:ny,-nz:nz))
 
  do zz=-ny,ny
     do yy=-nx,nx
        do xx=-nz,nz
           read(62,*)x(xx,yy,zz),y(xx,yy,zz),z(xx,yy,zz),v(xx,yy,zz)
        end do
     end do
  end do
 
  do xx=-nx,nx
     write(64,*) x(xx,:,:)
     write(65,*) y(xx,:,:)
     write(66,*) z(xx,:,:)
     write(67,*) v(xx,:,:)
  end do
 
  deallocate(x)
  deallocate(y)
  deallocate(z)
  deallocate(v)
 
  close(62)
  close(64)
  close(65)
  close(66)
  close(67)
           
end program

これで, x.txt, y.txt, z.txt, v.txtが出力されます.
nx, ny, nzの値は, 範囲設定を変えた場合は適宜それに合わせて書き換えて下さい.
さて, 準備ができたので, MATLABを起動しましょう.

x.txt, y.txt, z.txt, v.txtの階層に移動して,
次のコマンドを入力してこれらのファイルを読み込みます.
次のコマンドはスクリプトファイルにしちゃうと楽ですね.

xn=50*2+1   %xのデータ数
yn=50*2+1   %yのデータ数
zn=50*2+1   %zのデータ数
x=load('x.txt')
x2=reshape(x,xn,yn,zn)
y=load('y.txt')
y2=reshape(y,xn,yn,zn)
z=load('z.txt')
z2=reshape(z,xn,yn,zn)
v=load('v.txt')
v2=reshape(v,xn,yn,zn)

コードの内容は,
まず, 先ほどのデータを読み込みます.
次に, 読み込んだデータをちょっと整理してます.

さて, あとは描くだけです!!
次のコマンドを入力していきましょう.

E=0.5 %Eが描きたい等値面の値
p = patch(isosurface(x2,y2,z2,v2,E));
isonormals(x2,y2,z2,v2,p)
set(p,'FaceColor','green','EdgeColor','none'); %ここで色変更可
daspect([1,1,1])
view(30,30); axis([-1.5 1.5 -1.5 1.5 -1.5 1.5]) %axisで表示範囲を設定
camlight ('headlight') %光の当てる方向
camlight ('right') %光の当てる方向
lighting gouraud

これで, 綺麗な楕円体が描けると思います.

hcu

こんな感じですかね.

もうちょっと頑張ったら, これの断面図をグロテスクに描いたりもできますが,
まぁアクセス数次第ですかね.

レッツ!!!等値面!!!!!!!

Devil Maker: Tokyo_今回の大型アップデート(追記6/5)

5月14日の大幅アップデートで仕様がいろいろと変わったりした。変更点でなかなか重要そうなのをまとめていこうと思う。

1, 自動進行の設定
Menu-Optionsで、Exploreの自動進行の設定ができる。
最初から自動進行にしたり、闇の根源に遭遇した時のみ待機など指定することができる。

2, 戦闘で負けた場合のリトライ
今まではFPを500支払うことで、リトライすることができた。
今回のアプデで、Goldを使ってもリトライすることができる(らしい
間違えて、Gold利用のリトライをしないように(警告文が出るかは不明)

3, Raidの報酬が、まとめて送られてくるようになった。
今までバラバラでBOXを圧迫していましたが、同種類の報酬はまとめられるようになりました。BOXテロの発生が起こりにくくなりました。

4, ホムンクルス
新しくホムンクルスを作れるようになった。これはExploreの進行中に, 進行パーティーをホムンクルスパーティーに変えることができる。
ホムンクルスを作るには, Lv.40のRareカードが2枚必要となる。この2枚と, 進化ポイント・シルバーを使ってホムンクルスを生成する。このとき、素材となったカードはLv.1に戻る(オプションの変化は不明)。また, 通常のパーティに入れることは可能。再び別のホムンクルスの素材にはできない。
Goldを使えば、レベルのリセットを無効化したり、ホムンクルスのオプションを4つ確定にすることができる。

6/5追記———————
素材に使ったカードはレベルリセット以外は変化なし。オプション等はそのまま。
また、ホムンクルスのオプションとスキルは素材のものがランダムに反映される。
(星7を2体使ってホムンクルス作って確認済み)
—————————

5, クリティカル攻撃とスキル攻撃
今までの攻撃パターンは、スキル発動するかどうか決定し、スキル発動しなかった場合にクリティカル→通常攻撃となっていた。今回からは、スキル発動率とクリティカル発動率高いほうから、発動するようになった。
クリティカル発動(高確率)→スキル発動(低確率)→通常攻撃
or
スキル発動(高確率)→クリティカル発動(低確率)→通常攻撃
これにより、クリティカルパーティーはスキル発動を心配する必要がなくなった。

こんなもんですかね。特筆すべき変更点は。
ランク6, 7のオプションがだいぶ変更されました。もう一度確認したほうがいいかもしれませんね。
たとえば、
ヘラクレスは, どんな攻撃でもDPが上がるようになりました。強いです。
ヘムレスは、クリティカル攻撃でDPが上がり、さらにパーティーの回復オプションになりました。

Devil Maker: Tokyo_はじめに

たまには, 息抜きにゲームでも.

日本のソシャゲは, どれも最終的にはガチャで良いものを引かないと強くなれない飽和状態によくなる.
また, ガチャを引くアイテムも, ゲームが進行するごとに手に入り難く, 課金を遠回しに要求している.

お金を使わないと強くなれないというのは, ゲームとしてどうなのだろうか.

今回は, 以前からプレイしているゲームを紹介する.

DevilMaker: Tokyoは, 神話などをモチーフにしたカードゲームである.
海外のソーシャルゲームであり. 韓国版と英語版のものがある.
日本語版も以前はあったが, 現在は運営されてない.

おすすめする理由

1, ガチャが重要視されてない.
このゲームは, ガチャで☆3~5のカードがドロップするが, 最高レア度は☆7である.
課金したからといって, 最高レア度を入手することはできず,強化して行けばどれも強いカードになる.
また, ガチャを引くためのアイテムも, 購入せずともゲーム内でどんどん手に入るので困ることは無い.
(リセマラは重要でない)

2, 課金は主にプレイ時間の短縮を目的としている.
課金の主な内容が, ゲーム内アイテムの販売である. これは普通にプレイしていれば入手できるものばかりである.
他にも経験値増加やドロップ率増加アイテムも販売している. これらも, ランダムでダンジョンで同じ効果が出現する.
アイテム収集する時間, ゲームをずっとプレイする時間はないけど, ゲームは楽しみたい人用に, 課金アイテムが存在する.
つまり, このゲームは, 課金はプレイ時間を買うことに相当する.
たまに有料のイベントガチャもあるが, 最強カードがドロップなんてことは, 無い.
(イベントで上位ランクに入れば, ゲーム内課金通貨も報酬で手に入る. )

3, 好きなカードがほぼ確実に手に入る.
たとえランクの低いカードを手に入れても強化・進化をして行けば, どれも最高ランクまで強化可能である.
また, 毎月好きな☆5カードが手に入るシステムもあるので, 物欲センサーがあろうとなかろうと関係ない.

4, 絵が綺麗
正直, 適当な絵だったら, プレイしていない.

ゲームが外国語というのはやや抵抗があるだろうが, ゲーム自体は難しくないので(艦これみたいに半自動進行)すぐになれるだろう.

これから, このゲームについて, 少しずつだが, 説明していく.