はじめに

EXCELマクロPAWER POINTマクロで、自分が好きな物を作っています。 大気光象計算EXCELは自分の撮った写真のチェック用に作り始めましたが、 できたころには出現位置や見え方を覚えてしまいました。

分子模型はPAWER POINTで描いたものをgifアニメにしています。 そしてフラクタルではEXCELマクロで描いたマンデルブロ集合やジュリア集合、 コッホ曲線の動画や画像を紹介しています。

おねがい

EXCELマクロおよびPOWETPOINTマクロについて

氷晶

分子模型について

一見雪結晶に見えるけれど立体的にはかなり違う
Hexa(1H-pyrrol-1-yl)benzene →

マクロソフト

■EXCELマクロ

大気光象VBA 大気光象VBA

大気光象VBA

<ダウンロードはこちら(2015/6/3)>

excel_photometeors_ver29.zip(599kB)

必ずディスクに保存し、解凍してお使いください。

空に浮かぶ氷晶を透明な六角柱で表現し、 平たい六角柱(六角板状氷晶)・細長い六角柱(六角柱状氷晶)などに太陽光を当てたときの光の進み方を 反射・屈折の原理に従って計算することで、様々な大気光象をシミュレートするものです。 ご自身が撮られた大気光象をすぐにシミュレートするのは難しいと思いますが、 写真とシミュレート結果を重ね合わせながら、氷晶の形と姿勢を試行錯誤してみてください。

ファイルを開くと自動でマクロが動き、操作パネルが表示され、EXCEL自体は最小化されます。 何も設定しなくても「halo's シミュレート」ボタンを押せば、とりあえず大気光象シミュレート画像が表示されます。

氷晶

申し訳ありませんが、操作説明書はありません。ボタン等へマウスオーバーした時に出る説明をみて操作してください。 エラーが出た状況等、メールで教えて頂けると助かります。いまだ不具合がありますので、 古いVerをお使いの方は必ず新しいVerに入れ替えてください。

大気光象の形の変化・YouTubeで見る

※大気光象VBAの公開版にに動画作成機能はついておりません。

新潟市の夏至の一日をシミュレートした動画です。主だった大気光象が一通り見られるような氷晶雲でシミュレートしています。

大気光象VBA

更新履歴

2013/6/3:Ver.0.5試験公開

2013/7/20:Ver.1.2公開

魚眼レンズ描写修正、画角を細かく設定できるようにしました。 ローウィッツ、20面体氷晶を追加しました。撮影した写真と並べられる機能を追加しました。

2013/8/31:Ver.1.4試験公開

太陽光線の方向のミスを修正、4回までの履歴を記録できるようにしました。空の色を写真から選べるようにしました。

2013/10/13:Ver.1.6試験公開

氷晶の姿勢がどのようになっているか、イメージを表示できるようにしました(EXCEL2007以降のみ)。

2013/11/10:Ver.1.7試験公開

カメラの向きの処理ミスを修正、レンズを0.1mm単位で指定できるようにしました。

2013/12/1:Ver.1.9正式公開

写真との重ね合わせ機能を強化し、とりあえず完成版として公開。

2013/12/18:Ver.2.0公開

写真ファイル処理を若干変更、氷晶のイメージの動き修正

2014/3/8:Ver.2.2公開

カメラ回転(傾き)に対応。

2014/4/4:Ver.2.3公開

疑似的に拡散光を再現し、より実際の見え方に近くなるように改良。

2014/4/11:Ver.2.4公開

ランダムドット処理の不具合を修正。

2014/4/25:Ver.2.5公開

疑似拡散光の不具合を修正。

2014/6/21:Ver.2.6公開

疑似拡散光の効果調整、氷晶の呼び名など修正。

2015/5/12:Ver.2.8公開

カメラの向きを設定しやすくしました。

2015/6/3:Ver.2.9公開

特定の条件で一時メモリを多量に消費する問題を回避。

大気光象計算EXCEL

大気光象計算EXCEL

大気光象計算EXCEL Ver1.1

(HALO_EXCEL_Ver1.1.zip 16.6MB)

※公開は終了しました。

大気光象の出現位置や形状をEXCELで再現します。ダウンロードしてお楽しみください。なお、ファイルはzip形式で圧縮されています。

EXCEL2007以降対応です。EXCEL2003以前のバージョンでは動作しません。

幻日・22°ハロ・46°ハロ・タンジェントアーク・ラテラルアーク・環水平アーク・環天頂アーク・幻日環、パリーアークが計算されます。 光が届くすべての範囲(入射角90°までと射出角90°(全反射)まで)を描いているので、実際の見え方とは異なります。出現する位置や形状の確認にお使いください。

<使い方>

「カメラ画角」「魚眼」「半球投影(ウルフネット)」「写真重ね合わせ」のシートがあります。「半球投影(ウルフネット)」以外には以下のプルダウンボックスで条件を指定して大気光象を再現します。

「写真重ね合わせ」のシートではさらに以下の操作ができます。

大気光象計算EXCEL

「カメラ画角」「魚眼」「半球投影(ウルフネット)」「写真重ね合わせ」のシートはそれぞれ以下の通りの投影を行っています。

最低限の注意:

すべての大気光象の出現位置をワークシート計算させているため、一つの操作を行うたびに再計算を行います。 そのため、それなりに速いCPUのパソコンでも、操作後に結果が反映されるまでに少し時間がかかります。 また、稀にボックスやボタンなどの位置がずれたり、見えなくなったりする可能性があります。 どうやらEXCELのマクロを使っているうえで避けられない不具合のようです。もしそうなった場合は保存せずにEXCELを終了し、 再度EXCELを起動しファイルを開き直してください。グラフを「画面に合わせる」表示に設定していると崩れるようです。

コッホ雪片を描くEXCELマクロ

コッホ雪片EXCEL

ダウンロードはこちら

コッホ雪片を描くEXCELマクロ
(kochsnowflakes_whiteice.xls 84.5kB)

コッホ曲線(Koch curve)を三つ合わせたフラクタル図形「コッホ雪片」を描くEXCELマクロです。 ダウンロードしてお楽しみください。

ダウンロードしたファイルを開くと自動で描き始めます。いろいろとパラメータを変更し、 できる図形で新しいデザインを作り出してみましょう。

<使い方>

EXCELファイルを開くと操作フォームが出てきます。

操作フォーム

コッホ雪片の標準形は、折る角度=60°、尖度=1、曲線数=3、「へこませない」です。 いろいろな雪結晶模様を描く場合は曲線数を6にするとよいでしょう。

最低限の注意:

EXCEL2000ではうまく動きません(全く描かれないわけではないですが…)でした。EXCEL2007と2010は動きました。2003以前は複雑な模様は描けません。 「世代」というパラメータは、数が多くなるほど描画に時間がかかります。CPUのクロック数が 3GHzあっても少し待たなければなりません。あわてずに操作してください。

POWETPOINTマクロ

氷晶

動く分子模型PPT

<ダウンロードはこちら(2015/6/11)>

pptmol_ver0.1.pptm(182kB)

必ずディスクに保存してお使いください。

ファイルを開いた後、スライドショー開始→「マクロ開始」ボタンで右図のようなフォームが開きます。 起動直後、エタノール分子がサンプルが描かれます。

あとは見た目で操作してみてください。まだベータ版です。回転アニメーションがうまく動かないPCがあるようです。

分子模型データであるSDFファイルやMOLファイルはしかるべき場所からダウンロードしてください。 原子数が300以下の分子に限ります。また、表示されない元素があります

分子模型のgifアニメファイルは「動く分子模型」へ

天体運動パワーポイント

天体運動パワーポイント

<ダウンロードはこちら>

天体運動パワーポイント
(gravity_by_whiteice.ppt 125kB)

重力に支配された天体の運動です。ケプラーの法則の理解にも役に立つでしょうか。

PowerPoint2003に合わせて作ったもので、2007以降だととても遅いです。PowerPointの仕様なので、どうしようもありません。 対応策としてEXCEL2007以降版に移植したのですが、需要がないので公開はしていません。

<はじめ方>

  1. ツール→マクロ→マクロ→startを実行
  2. スライドショー→実行→STARTボタンを押す

色々いじってみてください。裏技的動作が沢山あります。

最低限の注意:

PowerPoint 2007以降では本当に遅いです。フリーズしたかのように見えることもあり得ます。

■フラクタル

マンデルブロ集合(Mandelbrot set)、ジュリア集合(Julia set)、 コッホ曲線(koch curve)による美しい絵や動画たちです。 すべてEXCELマクロにより描いています。

マンデルブロ集合とジュリア集合のマクロの一般公開の予定はありません。 EXCELマクロはマルチコアに対応せず、マルチスレッド処理できないので、マンデルブロ集合を計算するには速度が不十分です。

●マンデルブロ集合

マンデルブロ集合

複素平面上の関数 Z

漸化式: Zk+1 = Zk2 + CZ0 = 0

において、k → ∞ のとき Z が発散しない C 領域がマンデルブロ集合(右図で原点を囲む黒い領域)です。

発散した時の k の値によって色を塗り分けると、マンデルブロ集合の周りに美しい模様が描かれます。マンデルブロ集合以外の領域で美しい色模様ができ、マンデルブロ集合自体は複雑な輪郭線のみを作っていることになります。

また、2乗だけでなく、3乗、4乗・・・の場合もマンデルブロ集合を定義できます。

Zk+1 = Zkn + CZ0 = 0

こちらも美しい模様を描いてくれます。

動画

nはべき乗数、x、yは C の座標、zoom は拡大率(1の時x=±2、y=±2iの範囲)を示します。

YouTubeで見る

n = 2
x=0.743907649209441
y=0.131712048105437
zoom=16,528,925,620

YouTubeで見る

n = 2
x=0.0536421636064754E
y=-0.673572480898894
zoom=250,098,749.7

YouTubeで見る

n = 2
x=-0.264457713095696
y=0.00286289445787072
zoom=200,182,584,402

静止画

マンデルブロ集合 n = 6
x=-0.65424611379791
y=0.48644857932272
zoom=390,000
マンデルブロ集合 n = 2
x=1.3946584121866
y=2.18083625612595E-03
zoom=220,000,000
マンデル雪結晶 n = 6
x=1.14751577893737
y=1.66494297741486E-12
zoom=30,000,000,000
マンデル雪結晶 n = 6
x=-0.922856619302939
y=0.671270579537596
zoom=1,500,000,000,000
マンデルブロ集合 n = 7
x=-0.647480292299589
y=-0.00519608226663375
zoom=100,000,000,000
マンデルブロ集合 n = 7
x=-0.624161973929256
y=0.597442734484218
zoom=34,223.28
マンデルブロ集合 n = 2
x=-0.321673553725765
y=0.591124241684302
zoom=400,000,000,000
マンデルブロ集合 n = 2
x=0.721414706470344
y=0.259185915387929
zoom=200,000,000,000

VBAで複素計算のはなし

EXCEL VBAでは複素数計算ができないので、 ZC を複素数 Z = x + yi 及び C = a + bi と置き、 複素平面座標で漸化式を実数軸と虚数軸を別々に計算させます。

Zn+1 = (xn + yni)2 + a + bi = xn2 - yn2 + a + 2xnyni + bi

→ 実数軸: xn+1 = xn2 - yn2 + a 虚数軸:yn+1 = 2xnyni + bi

VBAで書くと例えばこんな感じになります(xk → xxk+1→xx という風に書き直してあります。)。ちなみにVBAではx ^ 2 よりも x * x と計算させるほうが処理が速くなります。

x = 0 : y = 0 ’初期値は0(Z0 = 0)

 For a = amin To amax ’計算する実数軸範囲

  For b = bmin To bmax ’計算する虚数軸範囲

   For k = 1 To kmax ’無限まで計算できないので、kmaxまでの上限を設けます。

    xx = x ^ 2 - y ^ 2 + a

    yy = 2 * x * y + b

    If xx ^ 2 + yy ^ 2 > 4 Then Exit For ’半径2以内に集合があるので、それを超える→発散

    x = xx: y = yy ’kをひとつ進めます。

   Next

   If k = kmax + 1 Then

    Mandelbrot(a, b) = -1 ’kmaxまで発散しなければ、マンデルブロ集合内と判断

   Else

    Mandelbrot(a, b) = k ’発散した時のkを格納。

   End If

   x = 0: y = 0

  Next

 Next

これで、Mandelbrot(a,b) = -1 の座標を黒く塗ればマンデルブロ集合の完成です。 また、Mandelbrot(a,b)の値により色を塗り分ければ、綺麗なマンデルブロ集合図形が出来上がります。

●ジュリア集合

マンデルブロ集合、漸化式、Zk+1 = Zk2 + C ,Z0 = 0 において、k → ∞ のとき Z が発散しない C 領域でしたが、 ジュリア集合は漸化式、Zk+1 = Zk2 + C において、 k → ∞ のとき Z が発散しない Z0 領域です。

複素平面上の定数C(xj,yj)の位置により、ジュリア集合は大きく姿を変えます。C(xj,yj)がマンデルブロ集合内にあるとき、ジュリア集合が存在します。 下左図はC(-0.6,0.4)(マンデルブロ集合内の点)の時のジュリア集合(原点を囲む黒い領域)です。下右図はC(-0.6,0.45)(マンデルブロ集合の外の点)の時のジュリア集合周辺部の描く模様です。

ジュリア集合 ジュリア集合

マンデルブロ集合との関係

マンデルブロ集合に含まれる複素平面上の点をジュリア集合の定数C(xj,yj)にとると、 ジュリア集合は領域を持ちます。反対にマンデルブロ集合周辺の点を取るとジュリア集合は領域を持ちません(上の二枚の図を参照)。

マンデルブロ集合の周辺部の複素平面上のある点(x, y) をジュリア集合の定数C(x,y)とし、 (x, y)周辺の模様をそれぞれ描くと、似たような模様が浮かび上がります。

マンデル雪結晶

マンデルブロ集合

n = 6
x=1.14751577893737
y=1.66494297741486E-12
zoom=30,000,000,000
ジュリア雪結晶

ジュリア集合

n = 6
xj=1.14751577893737
yj=1.66494297741486E-12
x=1.14751577893737
y=1.66494297741486E-12
zoom=30,000,000,000

動画

n はべき乗数、xj、yjは Z0 の座標、x、y は Z0 の座標、zoom は拡大率(1の時xj=±2、yj±2iの範囲)を示します。

ジュリア集合・YouTubeで見る

n = 6 xj=-1.1282 yj=0
x=0.573413286440667
y=0.993180945850281
zoom=100,000,000,000,000

静止画

ジュリア集合 ジュリア集合 ジュリア集合 ジュリア集合

n = 2 の標準的なジュリア集合を拡大したもの。

ジュリアロ集合 ジュリア集合 ジュリア雪結晶 ジュリア雪結晶

定数、座標を忘れると、二度と同じ模様を見れないかもしれません。

ジュリア雪結晶 n = 6
xj=-1.128
yj=0
x=0
zoom=1.4
ジュリア雪結晶 n = 6
xj=0.59
yj=0
x=0
y=0
zoom=1.4
ジュリア雪結晶 n = 6
xj=0
yj=0.8619
x=0
y=0
zoom=1.4

●コッホ曲線(koch curve)・コッホ雪片

コッホ曲線
  1. 一本の直線を三等分し、真中の部分に三等分の線分を一辺とする正三角形を書きます。
  2. 正三角形の底辺(元の直線の真中部分)を消します。
  3. すると4本の直線でできた山型の図形が描かれます。

上記操作を1セットとし、無限に繰り返していったときにできる図形をコッホ曲線と呼びます。無限に直線を分割するので、各直線の長さは 0 、したがって曲線となるわけです。

右の動画は上記1セットの操作を繰り返していったときの、コッホ曲線の変化の様子を示しています。何セット操作したかを「世代」で表してます。 6世代以降は画像の解像度に埋もれて変化がないようになります。

拡張コッホ雪片 コッホ雪片

コッホ曲線を3つ向かい合うように並べてできる図形は、その形が雪の結晶のように見えることからコッホ雪片 (せっぺん)と呼ばれます(左側)。

正三角形を作るように直線をふやすのではなく、頂角や辺の長さが異なる二等辺三角形を作るように直線をふやすと、 違った形のコッホ曲線を描くことができます。このようなコッホ曲線を6つ向かい合うように並べると、 より雪の結晶らしい図形を描くことができます(右側)。

静止画

g は世代数、r は元の線分と山型部分の線分の長さの比、a は山型部分の頂角、n は組み合わせたコッホ曲線の数を示します。

コッホ雪片 色々なコッホ雪片 コッホ雪片 g = 6
r = 2:1
a = -30°
n = 6
コッホ雪片 g = 7
r = 2.5:1
a = -45°
n = 6
塗りつぶし
コッホ雪片 g = 1〜7 を重ね合わせ
r = 3.25:1
a = -60°
n = 6

■動く分子模型

POWER POINTEXCEL VBAで描いたものをgifアニメにしています。

水分子や二酸化炭素分子のように平面に原子が並ぶものは手作業でも比較的簡単に描けます。 これがメタン分子のように3次元となっているものは座標計算が大変になりますが、 ←分子を作る原子の座標は、SDF形式等データとして公開されています。 そこで、マクロによりそのデータから直接分子を描けるようにしました。 ショ糖など複雑な分子もあっという間に描けます。 ただし、原子数が多い分子は処理落ちしたり、ずれた位置に描画されたりするどうにもならない不具合があります。

分子模型を描くパワーポイントは動く分子模型PPTに置いてあります。

アニメーション・ダウンロード

分子の画像をクリックすると gif 画像が動きます。動かしてから「画像を右クリック→名前を付けて保存」で保存してください。

注:分子模型画像の利用は自由としますが、一応出典を書くなどマナーは守ってください。

窒素 N2&酸素 O2

酸素 窒素

窒素(緑)酸素(赤)

空気の主要物質の窒素と酸素です。

微妙に窒素の方が大きく(ファンデルワールス半径をもとにしているので、その比率 155:152)、酸素の方が重い(約 7:8)です。

空気中の存在比率は約78:21≒4:1なので、この動画で空気を表現するならば、窒素分子を4個と酸素分子1個を描いて、 それぞれをランダムに移動させる必要があります。 回転させながらランダム移動、それに加えて終わりのコマと最初のコマがつながるようにするのは困難です。

二酸化炭素 CO2

二酸化炭素

黒:炭素原子 赤:酸素原子

二酸化炭素は酸素−炭素−酸素と直線上に並んでいる分子で、原子のサイズを考えて 3D の奥行きを指定するだけで簡単に描けます。

地球温暖化の主犯にされていますが、そのほかのガスにも結構な温暖化ガスがあるので、二酸化炭素だけ悪者なイメージがありますが・・・ ある程度の二酸化炭素濃度は植物の成長を促進することもあり、植物には必要なガスですね。

氷Ⅰh

ICE1h

赤:酸素原子 白:水素原子

氷は非常に多くの結晶形を持っていますが、普通に氷を作るとこの氷Ⅰh という結晶形になります。 六方晶系で、雪の結晶はこの結晶形により六角形を基本とした形になります。

水分子(酸素[赤] 1 個と水素[白] 2 個)が、水素結合と呼ばれる結びつきで、立体構造をとります。 画像ではものすごく分子が詰まっているように見えますが、決まった方向から見るとかなりスカスカになっているのが確認できます。 液体の水よりも隙間が大きい→密度が小さく水に浮く、となります。

氷の結晶軸は a 軸と c 軸とがあります( b 軸も定義されますが、a、c の 2 軸で表現されることが多いです)。 a 軸は互いに 120°で同一平面上で交わる a1〜aがあります。 ちょうど正六角形の対角線方向です。c 軸は、すべての a 軸に対して直交する方向になります。

右の模型で、丸い穴が 7 個見え全体が六角形になる方向が c 軸方向、丸い穴が 9 個見え全体が長方形になる方向が a 軸方向となります。 ちなみにこの模型には水分子が 96 個あります。水素原子は隣り合う酸素原子の間に 1 個しかありません。

水 H2O

H2O

赤:酸素原子 白:水素原子

原子のサイズ(ファンデルワールス半径。水素1.2A(Aはオングストローム=10-10m)、酸素1.5A)、 共有結合距離(0.96A)、H-O-H 結合角104°です。

水分子は極性分子で、酸素がマイナス、水素がプラスの電気を帯びやすくなっています。 これらが引き寄せあうことで、固体である氷では水素結合を作ります。

エタノール分子 CH3CH2OH

エタノール""

黒:炭素 赤:酸素 白:水素

注射前の消毒液の主成分ですね。蒸発しやすい液体で、殺菌効果があり、水のように結構いろいろなもの(特に有機物=汚れ)を溶かすので、 皮膚に塗る→殺菌&汚れを溶かす→一緒に蒸発→きれいに消毒される、ということで消毒に使われます。

エタノールのOH基(親水基)の水素原子と水分子の酸素原子、エタノールの酸素原子と水分子の水素原子がそれぞれ水素結合しやすいので、 水とは大変仲良し。どちらがどんな量でも溶け合います。さらに、溶かす前の合計体積よりも溶かした後の体積のほうが小さいという性質があります。

水は平面に3原子が並んでいるだけなので非常に簡単に描けますが、エタノールのように3次元に配置している分子は結構頭を使います。ところで、みなさん、エタノール分子は犬に見えませんか?

塩化ナトリウム NaCl

塩化ナトリウム

緑:塩化物イオンCl- 青:ナトリウムイオン Na+

食塩の主成分、海水の塩分の主成分、などなど、なじみのある塩化ナトリウムです。 寒剤としても有名で、氷水に食塩を溶かすと最低-21℃まで下げることができます。

結晶構造は面心立方格子で、図のように塩化物イオンは立方体の各頂点と各面の中心にあります。 同様にナトリウムイオンも各頂点と各面の中心にあります。 2原子が共に面心立方格子を形成している構造を、塩化ナトリウムを代表として岩塩型構造とも呼びます。

テトラクロロジベンゾパラジオキシン C12H4Cl4O2

テトラクロロジベンゾパラジオキシン

黒:炭素 赤:酸素 白:水素 緑:塩素 Cl

テトラクロロジベンゾパラジオキシン・・・代表的なダイオキシンのひとつです。

テトラ( 4(個の))クロロ(塩素(に置き換わった))ジ( 2(個の))ベンゾ(ベンゼン(環)) パラ(向かい合わせの位置)ジ( 2(個の))オキシン(酸素)ということで、 ベンゼン 2 個(C6H6× 2 個)を基本として、 4 個の水素が 4 個の塩素に置き換えられ、4 個の水素の代わりに 2 個の酸素がベンゼンを結合しています。

ホウ酸 H3BO3

ホウ素

ピンク:ホウ素 赤:酸素 白:水素

殺虫剤などに使われている弱酸です。小学校の理科「もののとけかた」で、食塩や砂糖に並んで扱われることが多い試薬です。

ホウ酸の結晶も氷と同じく水素結合によってできています。

ショ糖(スクロース) C12H22O11

ショ糖

黒:炭素 赤:酸素 白:水素

砂糖の主成分です。見ずに良く溶ける(2.1g/g 25℃のとき)無色の物質です。

グルコース(ブドウ糖)とフルクトース(果糖)の分子がが結合した形をしており、二つの糖からなる二糖類です。

コレステロール C27H46O

コレステロール

黒:炭素 赤:酸素 白:水素

コレステロールというと、善玉/悪玉とついて健康指標になっており、よく聞く名称です。 血液検査で出てくるコレステロールは、正確にはタンパク質分子との複合体で、純粋なコレステロール分子は細胞を作る主要な生体分子の一つです。

リモネン C10H16

リモネン

黒:炭素 白:水素

リモネン

ミカンなどのかんきつ類の皮に含まれている、良い香りがする液体です。 ミカンの皮で油性マジックで描いた絵を消す実験がありますが、それはこのリモネンの性質です。 発泡スチロールを溶かす実験でも有名でしょうか。D体とL体があるので、それぞれ交差法のgifアニメを作ってみました。

光学異性体で、上がD体、下がL体です。

大気光象VBA 大気光象計算
EXCEL
コッホ雪片
EXCEL
動く分子模型
パワーポイント
天体運動
パワーポイント
マンデルブロ
集合
ジュリア集合 コッホ曲線 分子模型 ページトップ Home