2018年
11月
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

setup diary

2007|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|06|08|11|
2015|01|02|03|04|05|06|07|08|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|

2018-11-12 軌道の絵

_ Rのrglを使った原子軌道の角度部分の絵

原子軌道の角度部分の立体的な絵を、ソフトを使って書いてみた。webを調べるとpovrayを使って書いている人が多かったが、特殊関数などの定義が面倒だし、Rのrglを使って書いた方が良い気がして、その方針でやってみた。ソースは以下のとおりです。

library(misc3d)
library(gsl)
theta<-function(x,y,z)acos(z/sqrt(x^2+y^2+z^2))
phi<-function(x,y,z)atan( (sqrt(x^2+y^2)-x)/y )*2
th<- 0:100/100*pi
ph<- 0:200/200*2*pi
fc <- function(x,y,z)ifelse(fr(theta(x,y,z),phi(x,y,z))<0,'blue','red')
fx <- function(t,p)abs(fr(t,p))*sin(t)*cos(p)
fy <- function(t,p)abs(fr(t,p))*sin(t)*sin(p)
fz <- function(t,p)abs(fr(t,p))*cos(t)
for(l in 0:5){
 for(m in 0:l){
  fr <- function(t,p)legendre_Plm(l,m,cos(t))*cos(m*p)
  parametric3d(fx, fy, fz, th, ph,color=fc)
  play3d(spin3d(c(0, 0, 1), 10),5)
}}

ライブラリとしては、特殊関数を使うためにrglを使って、プロットにはmisc3dのparametric3dを使った。極座標のphiは、tan(2phi)から計算するようにして、条件分岐を減らすことができた。とりあえず、h軌道ぐらいまで書いて、五秒間10rpmで回すようにしてみたが、分かりやすくなったかな。