二面角の測定と変更
このページでは,4 原子が成す二面角の測定法や変更法を紹介します.
Builcule で結合角を変更する方法には,マウス操作で変更する方法と,値を指定して変更する方法があります.
操作法だけではなく,基礎的な考え方も紹介しています.
Builcule-10 では二面角の値を,反時計回りに 0°〜 180°,時計回りに 0°〜 -180°としています.
- 4 原子のピック法
- 4 原子が成す二面角の測定
- マウスで二面角を変更
- 値を指定して二面角を変更
4 原子のピック法
まず,操作の対象とする 4 原子をピック(原子をクリックして赤紫に表示)します.
画像は異時同図法で,ジクロロエタンの 4 個の原子を,2 → 3 → 4 → 5 の順にピックしていくところと解釈してください.
二面角を測定する場合は,原子どうしが共有結合している必要はありません.
二面角を変更するためのピックには,条件が付きます.
- 直列に結合していること
- 環の一部でないこと
4 原子が成す二面角の測定
4 原子をピックして水平ツールバーの [二面角を測定] ボタンをクリックすると,4 原子の成す二面角(°)がポップアップウィンドウに表示されます.
二面角を測定するアルゴリズム
画像は二面角の測定法を概念的に表したものです.
点 A,B,C,および D が成す二面角というのは,点を A → B → C → D の順で考えたとき,
点 A,B,C が成す平面と,点 B,C,D が成す平面をイメージしたときに,これらの 2 面が成す角度のことです.
Builcule では,それぞれの面に垂直なベクトル(法線ベクトル)を求め,それらが成す角を求めています.
画像は二面角の測定法を概念的に表したものです.
4 点 A,B,C,および D を A → B → C → D の順でピックされたとします.
このとき,
- 点 A,B,C が成す平面
- 点 B,C,D が成す平面
をイメージしてください.
二面角というのは,これらの 2 面が成す角度のことです.
Builcule では,それぞれの面に垂直なベクトル(法線ベクトル)を求め,それらが成す角を求めています.
手順1:それぞれの面ごとに,法線ベクトル求めます
図では,2 本の法線ベクトルを赤い矢印で示しました.
左側の法線ベクトルは,ベクトル BA と ベクトル BC の外積です.
右側の法線ベクトルはベクトル CB と ベクトル CD の外積です.
Builcule では,線形代数ライブラリ Eigen の cross() という外積を返す関数を使い,
Eigen::Vector3d (外積ベクトル B) = (ベクトル BA).cross(ベクトル BC);
Eigen::Vector3d (外積ベクトル C) = (ベクトル CB).cross(ベクトル CD);
といった感じでコーディングしています.
これは内積で求まります.Eigen での内積を求める関数は dot() です.
標準化しておけば,内積がそのままコサインの値になります.
(外積ベクトル B).normalize();
(外積ベクトル C).normalize();
(二面角のコサイン) = (外積ベクトル B).dot(外積ベクトル C);
マウスで二面角を変更
- 4 原子をピック
- 水平ツールバーの [二面角を変更] ボタンをクリック
- マウスの左ボタンを押したままドラッグ
この際,後でピックした側の領域が回転します.
「二面角を変更」の状態は,マウスのボタンを離すと解除されます(ピックは維持されます).
二面角を変更するアルゴリズム
図は,二面角変更の概念図です.
これを使い,Builcule での,原子 A,B,C,D の成す二面角を変更するための考え方を下に記します.
- 回転すべき対象を定めます.図では原子 D です.一般的には,D と結合した C 以外の原子も含まれます
- 回転の中心を C とします
- 回転軸を定めます.ここでは,ベクトル BC を正規化したものとします.図では赤い矢印で示しました
- 回転させたい角度に応じた回転行列を作成します
- 回転の中心が原点に来るように,回転すべき対象を平行移動します
- 回転行列と回転すべき対象の座標を掛け算します
- 回転すべき対象を,元の位置に平行移動します
値を指定して二面角を変更
4 原子をピックしてメニューの [値を指定して二面角を変更] を実行すると,数値の入力を求めるウィンドウが表れます.
画像は,90.0 と入力したところです.
設定できる数値は,0°〜 360°です.
この状態で [実行] ボタンを押すと二面角が入力した数値に変更されます.
変更後,ピックは維持されます.