メールマガジン・新着情報一覧
- TOP
- メールマガジン・新着情報一覧
- A-0059. STLで正20面体を作ってみました(前半) — TT
2016.05.11
A-0059. STLで正20面体を作ってみました(前半) — TT
◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇ STLで正20面体を作ってみました(前半) 発行:エスオーエル株式会社 https://www.sol-j.co.jp/ 連載「X線CTで高精度寸法測定!?」 2016年5月11日号 VOL.059 平素は格別のお引き立てを賜り、厚く御礼申し上げます。 X線CTスキャンによる精密測定やアプリケーション開発情報などをテーマに、 無料にてメールマガジンを配信いたしております。 ◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇ TomoScope に測定物をセットし、スキャンすると、 ボリュームデータと呼ばれるファイルができます。 ボリュームデータのままでは、寸法測定や形状解析が不便です。 ボリュームデータには、空間にどんな物体が置かれていたのかという 情報はありますが、分解能の問題で、空気と物体の境界が定まっていないからです。 そこで、空気と物体の境界をソフトウェアに解析させて、 STLファイルと呼ばれるポリゴンデータを作ります。 あたかも不足していた分解能をソフトウェアで操作したかのように 聞こえますが、情報量を増やしたわけではなく、むしろ情報量は減っています。 ボリュームデータには、例えば、1000×1000×1000×32bit の情報量が 入っています。これで 4GB のファイルサイズになります。 この情報から、100万点以上の座標データを空気と物体の境界として、 計算していきます。その結果作られるSTLファイルは、200MB 弱になります。 STLにすることで、情報量は減りますが、三次元の座標情報の精度は向上しています。 そんなSTLですが、ファイル形式の仕様を知っていれば、 自作のプログラムで解析したり、自由に形を作ったりすることができます。 STLは、三角形を貼り合わせて三次元形状を表現します。 そのため、何か形を作ろうと思ったときは、三角形の頂点を入力していくことになります。 今回は、趣味の正20面体をSTLで作成してみました。 実際、正20面体の頂点座標をゼロから求めようとすると、 思ったよりも簡単ではありませんでした。 正20面体は昔から知っているし、頭の中でイメージもできるので、 正20面体のことはよく何でも知っているつもりでいましたが、 案外分かっているつもりになっていたことに気付いてびっくりしました。 さて、正20面体は、20枚の正三角形が貼り合わされたものですが、 その頂点は12個あります。 まず、一つの頂点に注目してみると、その周りには正三角形が5枚つながっています。 そこで、この注目した頂点を P01 と名付け、隣接する頂点を P02 ~ P06 とします。 正20面体の各辺の長さを 1 としておくと、 頂点 P02 ~ P06 は、辺の長さが 1 の正五角形になっています。 本来、正三角形は、6枚を貼り合わせて正六角形を作った時に、 全ての正三角形の面が平面上に乗ります。 しかし、5枚の正三角形の辺を合わせたときには、平面上には乗らず、 頂点 P01 が正五角形が乗っている平面からある高さを持って浮いている状態になります。 頂点 P01 を P02 ~ P06 が乗っている平面上に射影した点を C として、 C と 正五角形の1辺までの距離を a とし、C と P02 までの距離を b とします。 a と b が求まれば、正20面体の頂点座標を求める大きな手掛かりになります。 でも、いきなりは求まらないので、最初に正五角形 P02 ~ P06 において、 点 P03 と P06 の距離 d を求めておきます。 正五角形の頂点をそれぞれ線で結んでみると、 二等辺三角形がたくさん現れることが分かります。 直線 P03-P06 と 直線 P02-P05 の交わる点を S とすると、 P03 と S の距離が 1 になっていることが分かります。 そこで、S と P06 の距離を x とおきます。 さらに、直線 P03-P06 と 直線 P02-P04 の交わる点を T とすると、 S と T の距離は、1-x です。 三角形 P02-S-T と 三角形 P03-P02-S は相似なので、 1 : x = x : (1-x) という式が立ちます。 つまり、x^2 = 1-x を解けばよいことになります。 x^2 + x - 1 = 0 を平方完成して、(x + 1/2)^2 = 1 + 1/4 となりますので、 両辺の平方根を取り、x>0 の解を選ぶと、 x = (√5 - 1)/2 となります。 つまり、点 P03 と P06 の距離 d は、1+x なので、 d = (√5 + 1)/2 となります。 この先は、まだ長いので、後半は次回の続きにします。 こんな何の役に立つのか分からない趣味ですが、 三次元測定や光学を使う仕事をしていると、必要になる計算が苦ではないのと、 頭の中で三次元形状をイメージして考えることができるので、 結構助かっています。 後半に続く。。 -- 高野智暢 ☆TomoScope専門サイトはこちら☆