回転マトリックスと OpticStudio の X/Y/Z 軸周りのティルト

この記事では、OpticStudio のシーケンシャル モードとノンシーケンシャル モードで面がどのように配置されるかについて、詳細に考察します。回転マトリックスと X/Y/Z 軸周りのティルトについて解説するとともに、これらに関連してよくある質問の回答を示します。
 

著者 Michael Cheng & Michael Humphreys

Downloads

記事の添付資料

Introduction

OpticStudio では、シーケンシャル面またはノンシーケンシャル オブジェクトを目的の方向に回転する場合、一般的にX/Y/Z 軸周りのティルトを使用します。

X/Y/Z 軸周りのティルト

シーケンシャル モードでは、座標ブレーク面で X/Y/Z 軸周りのティルトを使用して次の面の方向を定義します。

Sequential Mode - Tilts X,Y,Z

ノンシーケンシャル モードでは、すべてのオブジェクトの方向を X/Y/Z 軸周りのティルトの各パラメータで指定します。

Non Sequential Mode - Tilts X,Y,Z

理論的には、X/Y/Z 軸周りのティルトの 3 つの値で、考えられるあらゆる方向を定義できます。
言い換えれば、面またはオブジェクトは、最初に X 軸中心、つづいて Y 軸中心、最後に Z 軸中心に回転することで、任意の方向に向けることができます。
 

回転マトリックス

一方、OpticStudio の [解析] (Analyze) → [レポート] (Reports) にある [データ一覧] (Prescription Data) では、面またはオブジェクトの方向を回転マトリックスで記述します。
[グローバル頂点] (Global Vertex) のセクションには、回転マトリックスの R11 から R33 と X/Y/Z 軸周りのティルトが表示されます。


Prescription Data - Global Vertex

ノンシーケンシャル モードでは、[解析] (Analyze) → [データ一覧] (Prescription Data) を開くことで、各オブジェクトの回転マトリックスが表示されます。


NSC - Rotation Matrix

 

X/Y/Z 軸周りのティルトから回転マトリックスへの変換

X/Y/Z 軸周りのティルトの 3 つの値から回転マトリックスを求めるには、回転マトリックスを、X 軸周りの回転マトリックス、Y 軸周りの回転マトリックス、Z 軸周りの回転マトリックスの 3 要素の回転マトリックスの積として考えます。

 

Conversion
 

回転マトリックスから X/Y/Z 軸周りのティルトへの変換

回転マトリックスから X/Y/Z 軸周りのティルトに変換する場合は、次のようにオイラー角を計算します。オイラー角は、内因性回転に対して使用します (下記を参照)。
 

Conversion


上記で使用している関数 ATAN2 には、2 つの引数として第 1 引数 x と第 2 引数 y があります。
ATAN2 の引数の定義は、プログラミング言語ごとに異なることがあります。以下に、いくつかの一般的なプログラミング言語における ATAN2 の定義の一覧を示します。

言語 関数 モジュール/ライブラリ
Excel atan2(x, y) Not needed
Python math.atan2(y, x) Import math
MATLAB atan2(y, x) Not needed
C++ atan2(y, x) #include <math.h>
C# Math.Atan2(y, x) using System;
Mathematica ArcTan[x, y] Not needed

 

ZPL マクロを使用した評価関数における X/Y/Z 軸周りのティルトの計算

評価関数で回転マトリックスを表示するには GLCR オペランドを使用します。ただし、現在のところ、任意の面が持つ X/Y/Z 軸周りのティルトを表す単独のオペランドはありません。ZPL を使用したユーザー定義オペランドを作成すれば、X/Y/Z 軸周りのティルトを取得できます。

この記事の添付ファイルには、以下が収録されています。

  • ZPLM ユーザー定義オペランド "ZPL19.zpl"。このファイルは "{Zemax}\Macros\" フォルダに保存できます。
  • このマクロを評価関数に使用しているサンプル光学系

 

内因性回転と外因性回転

「最初に X 軸周り、次に Y 軸周り、最後に Z 軸周りに回転する方法」として、実際には次の 2 通りがあります。

  • 必ず元の軸を中心として回転する方法。これを外因性回転と呼びます。
  • 変換後の軸 (その前の回転を実行して得られた新しい軸) を中心として回転する方法。これを内因性回転と呼びます。

OpticStudio では内因性回転の規則に従います。言い換えれば、面やオブジェクトは、元の X 軸を中心として回転した後、その回転によって得られた新しい Y 軸を中心として回転し、さらにその回転によって得られた新しい Z 軸を中心として回転します。

 

シーケンシャル モードの場合、座標ブレーク面の回転順序を [順番] (Order) フラグで変更できます。このフラグが 0 の場合は内因性回転、1 の場合は外因性回転です。面やオブジェクトに外因性回転を適用すると、回転の順番が逆になります。以下に例を示します。

  • 内因性回転 x-y-z (フラグ = 0) は、同じ角度の外因性回転 z-y-x (フラグ = 1) によって戻すことができます。
  • 外因性回転 z-y-x (フラグ = 1) は、同じ角度の内因性回転 z-y-x (フラグ = 0) によって元に戻すことができます。

 

ノンシーケンシャル モードでオブジェクトに外因性回転を適用するには、[オブジェクト プロパティ] (Object Properties) → [タイプ] (Type) を選択し、[グローバル XYZ 回転順番を使用] (Use Global XYZ Rotation Order) をチェックします。

NSC - Extrinsic

 

シーケンシャル モードにも、ローカル座標とグローバル座標を切り替えるツールがあります。詳細は、ナレッジベースの記事 How to work in global coordinates in a sequential optical system (英語) を参照してください。

 

回転マトリックスから X/Y/Z 軸周りの外因性ティルトへの変換

z 軸、y 軸、x 軸を中心としたこの順序の外因性回転の各成分、または x 軸、y 軸、z 軸を中心としたこの順序の内因性回転の各成分を、回転マトリックスを使用して表すことができます。

たとえば、外因性回転 ZYX の場合、各ティルト角は次のようになります。

X 軸周りのティルト = ATAN2(R33, R32)

Y 軸周りのティルト = ASIN(-R31)

Z 軸周りのティルト = ATAN2(R11, R21)

 

References

KA-01638

この記事は役に立ちましたか?
17人中14人がこの記事が役に立ったと言っています

コメント

0件のコメント

記事コメントは受け付けていません。