はじめに
こんにちは、meviyのPMIチームで開発をしている横田です。
これまで幾何計算の紹介として内積・外積・三角関数をご紹介してきました。
今回は少し趣向を変えて、「座標系」についてご紹介します。
techblog.dt-dynamics.com techblog.dt-dynamics.com techblog.dt-dynamics.com
座標系とは?
数学の授業で習ったx軸・y軸のグラフを思い出してみてください。あれが2次元の座標系になります。 それにz軸が加わることで、3次元の座標系になります。

座標系は、「原点(どこをゼロ点とするか)」と「軸の向き(x軸/y軸/z軸がどちらを向くか)」によって決まります。 この「基準」が違えば、同じ点でも座標の値が変わります。
meviyで扱う座標系
meviyでは、主に3種類の座標系を使い分けています。
World座標系
CADファイルに含まれている値をそのまま使う座標系です。
全体の基準となる座標系になります。

Local座標系
meviyの3Dビューアーの画面に表示されているx/y/zの向きがこれにあたります。
モデルの向きを定める情報によって定義されており、モデルの向きに沿った座標系です。

PMI座標系
meviyでは、3次元空間上にPMIを表示するための2次元の座標系が存在します。
PMIごとにこの2次元の座標系を持ち、表示する平面などに応じて向きが決まります。

※ PMI(Product Manufacturing Information: 製品製造情報)については過去の記事で概要をご紹介していますので、合わせて読んでいただけると嬉しいです。
なぜ複数の座標系が必要なのか?
座標系が複数あると何が良いのか?実際の例を通じて、なぜ複数の座標系が必要になるのかを見てみましょう。
boundと座標系の関係
3Dモデルを扱うとき、ある形状(面や穴など)の大きさや位置を知りたい場面があります。
そのために使うのが、形状がどの範囲に存在するかを表す「bound」です。
ところが、このboundはどの座標系で測るかによって形や大きさが変わります。
例えば、斜めに傾いた面を考えてみます。

World座標系で見た場合、斜めの面を座標軸に平行な箱で包むことになるため、実際の面より大きなboundになってしまいます。
一方、対象に合わせて座標軸を回転させた座標系(例:処理目的に応じたLocal座標系)で見ると、より面に近い(小さな)boundが得られます。
meviyでは寸法追加などモデルの向きに沿った処理が多いため、こうした場面ではLocal座標系を使うことで計算がシンプルになります。
また、PMI(製造情報)を3D空間上に表示する際には、PMI座標系が活躍します。
PMI座標系は表示する平面に沿った2次元の座標系なので、3D空間上の処理であっても、2次元的な計算だけでPMIの配置やレイアウトを行うことができます。
このように、処理の目的に応じた座標系を選ぶことで、複雑になりがちな計算をシンプルに扱えるようになります。
同じ形状でも「どこから見るか」で扱いやすさが変わる、というのが複数の座標系を持つ理由です。
座標変換
異なる座標系をまたいで計算が必要になる場面では、「座標変換」を行います。
座標変換とは、ある座標系で表された点や向きの値を、別の座標系での値に読み替える操作です。
例えば、Local座標系で求めた面の位置を3Dモデル全体の中に位置づけたい場合はWorld座標系への変換が必要になりますし、
3D空間上の点をPMIの2次元平面上に落とし込みたい場合はPMI座標系への変換が必要になります。

開発中、「同じ点を指しているはずなのに、計算結果が想定と合わない」という場面に出くわすことがあります。
その多くは座標変換が抜けていたり、意図とは異なる座標系の値を使ってしまっていたりするケースです。
PMI開発では複数の座標系を行き来する場面が多いため「今どの座標系の値を扱っているか」を意識することが大切です。
おわりに
今回は幾何計算の例として、座標系についてご紹介しました。
複雑な概念で難しいかもしれませんが、実際の開発イメージを少しでも持っていただけたなら幸いです。
引き続きmeviyのPMI表示について発信していければと思いますので、今後ともよろしくお願いします!