ベンゼン環と化学反応式
ベンゼン環を含む化学反応式や構造式を描きます。
まず,ベンゼン環を描く関数を作ります。引数として,KeTCindyの一般的な関数にある,name と,表示位置,タイプ,回転角をつけます。回転角は30度の倍数で指定します。引数は全部指定しなくてもいいように,同名で引数の異なる関数を作っておきます。
benzen(name,pt):=benzen(name,pt,1,1);
benzen(name,pt,type):=benzen(name,pt,type,1);
benzen(name,pt,type,rot):=(
regional(r,vt,vt1,vt2,vt3,th,opt);
if(type==1,opt=[],opt=["Cutend=-0.1"]);
r=sqrt(3)/3;
vt=apply(1..7,th=pi/3*#-rot*pi/6;
r*[cos(th),sin(th)]);
vt1=apply(vt,pt+#);
vt2=apply(vt,pt+0.8*#);
vt3=apply(vt,pt+1.5*#);
Listplot("ben"+name,vt1);
if(type==3,
Circledata("ben"+name,[pt,pt+[0.4,0]]);
,
Listplot("ben1"+name,vt1);
Listplot("ben2"+name,[vt2_1,vt2_2],opt);
Listplot("ben3"+name,[vt2_3,vt2_4],opt);
Listplot("ben4"+name,[vt2_5,vt2_6],opt);
);
apply(1..6,[vt1_#,vt3_#]);
);
まず,3つのタイプを描きわけましょう。
benzen("1",[1,1],1);
benzen("3",[3,1],2);
benzen("5",[5,1],3);
もうひとつ,全体をコピーして,Listplot("ben3"+name,[vt2_3,vt2_4],opt);の先頭に // をいれてコメント化し,二本線を2ヶ所にしたものもbenzen2() として作っておきます。
いろいろな構造式や反応式を描いてみましょう。
メチルオレンジ
Expr([[-1.6,1],"e","(\rm{CH}_3)_2\rm{N}"]);
p=benzen("1",[1,1],2,4);
Listplot("1",p_2);
Listplot("2",p_5);
Letter([[2,1],"e","N=N"]);
p2=benzen("2",[4,1],2,6);
Listplot("3",p2_6);
Listplot("4",p2_3);
Expr([p2_3_2,"e","\rm{SO}_{3}^{-}Na^{+}"]);
フタル酸
p=benzen("1",[1,1],3);
Listplot("1",p_1);
Listplot("2",p_2);
Letter([p_1_2,"e","COOH",p_2_2+[0.4,0],"n","COOH"]);
フェナントレン
benzen("1",[0,0],1,3);
p=benzen2("2",[1,0]);
benzen2("3",p_1_1+[0,sqrt(3)/3],1,-1);
2-ナフトール
benzen("1",[0,0],1,3);
p=benzen2("2",[1,0]);
Listplot("1",p_1);
Letter([p_1_2,"e","OH"]);
フェノールと臭素の反応
Fontsize("l");
p=benzen("1",[0,0],1,3);
Listplot("1",p_3);
Letter([p_3_2+[0.2,0],"n","OH"]);
Expr([[0.9,0.3],"e","+3\rm{Br}_2"]);
Arrowdata("1",[[2.5,0.3],[3.5,0.3]],[1,1,1,1]);
p=benzen("2",[4.5,0.3],1,3);
Listplot("2",p_2);
Listplot("3",p_3);
Listplot("4",p_4);
Listplot("5",p_6);
Letter([p_2_2,"e","Br",
p_3_2+[0.2,0],"n","OH",
p_4_2,"nw","Br",
p_6_2+[0.1,0],"s2","Br",
[5.8,0.3],"e","+3HBr"]);
元素記号入りの構造式
略記号でなく,元素記号入りの構造式を描いてみましょう。正六角形の頂点と枝の位置をbenzen() の中で求めているので,同じようにやります。
vt=apply(1..7,th=pi/3*#+pi/6;[cos(th),sin(th)]);
vt2=apply(vt,0.9*#);
vt3=apply(vt,2*#);
repeat(6,s,
Listplot("b"+s,[vt_s,vt_(s+1)],["Cutend=0.3"]);
Listplot("bb"+s,[vt_s,vt3_s],["Cutend=0.3"]);
);
Listplot("1",[vt2_1,vt2_2],["Cutend=0.25"]);
Listplot("2",[vt2_3,vt2_4],["Cutend=0.25"]);
Listplot("3",[vt2_5,vt2_6],["Cutend=0.25"]);
Fontsize("l");
repeat(6,s,
Letter([vt_s,"c","C",vt3_s,"c","H"]);
);
< 戻る >