二面角の測定と変更

このページでは,4 原子が成す二面角の測定法や変更法を紹介します.
Builcule で結合角を変更する方法には,マウス操作で変更する方法と,値を指定して変更する方法があります.
操作法だけではなく,基礎的な考え方も紹介しています.

Builcule-10 では二面角の値を,反時計回りに 0°〜 180°,時計回りに 0°〜 -180°としています.

  1. 4 原子のピック法
  2. 4 原子が成す二面角の測定
  3. マウスで二面角を変更
  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 の順でピックされたとします.
このとき,

をイメージしてください.
二面角というのは,これらの 2 面が成す角度のことです.

Builcule では,それぞれの面に垂直なベクトル(法線ベクトル)を求め,それらが成す角を求めています.

手順1:それぞれの面ごとに,法線ベクトル求めます

図では,2 本の法線ベクトルを赤い矢印で示しました.
左側の法線ベクトルは,ベクトル BA と ベクトル BC の外積です.
右側の法線ベクトルはベクトル CB と ベクトル CD の外積です.

Builcule では,線形代数ライブラリ Eigen の cross() という外積を返す関数を使い,
Eigen::Vector3d (外積ベクトル B) = (ベクトル BA).cross(ベクトル BC);
Eigen::Vector3d (外積ベクトル C) = (ベクトル CB).cross(ベクトル CD);
といった感じでコーディングしています.

手順2:得られた 2 本の法線ベクトルの成す角度を求めます

これは内積で求まります.Eigen での内積を求める関数は dot() です.
標準化しておけば,内積がそのままコサインの値になります.
(外積ベクトル B).normalize();
(外積ベクトル C).normalize();
(二面角のコサイン) = (外積ベクトル B).dot(外積ベクトル C);


マウスで二面角を変更

  1. 4 原子をピック
  2. 水平ツールバーの [二面角を変更]二面角を変更 ボタンをクリック
  3. マウスの左ボタンを押したままドラッグ

この際,後でピックした側の領域が回転します.
「二面角を変更」の状態は,マウスのボタンを離すと解除されます(ピックは維持されます).

二面角を変更するアルゴリズム

二面角の変更法

図は,二面角変更の概念図です.
これを使い,Builcule での,原子 A,B,C,D の成す二面角を変更するための考え方を下に記します.

  1. 回転すべき対象を定めます.図では原子 D です.一般的には,D と結合した C 以外の原子も含まれます
  2. 回転の中心を C とします
  3. 回転軸を定めます.ここでは,ベクトル BC を正規化したものとします.図では赤い矢印で示しました
  4. 回転させたい角度に応じた回転行列を作成します
  5. 回転の中心が原点に来るように,回転すべき対象を平行移動します
  6. 回転行列と回転すべき対象の座標を掛け算します
  7. 回転すべき対象を,元の位置に平行移動します

値を指定して二面角を変更

二面角を指定

4 原子をピックしてメニューの [値を指定して二面角を変更] を実行すると,数値の入力を求めるウィンドウが表れます.
画像は,90.0 と入力したところです.
設定できる数値は,0°〜 360°です.

この状態で [実行] ボタンを押すと二面角が入力した数値に変更されます.
変更後,ピックは維持されます.