APL/J言語:座標幾何学

APL/J言語:座標幾何学
座標幾何学について、二次元のポリゴンのための関数を説明します。それにより、隣り合う頂点の置換、辺の長さ、半周、ヘロンの公式に基づいた面積が扱われます。

また、頂点が反時計回りの時に正となるような符号付面積だけでなく、より一般的な高次の次元での多面体の場合についてもあてはまる定義をしめします(その場合、面積というよりはボリュームということになります)。この定義は値%!#tの最後の行による頂点tのテーブルのボーダー化によって得られる正方行列に対して行われた行列式(determinant)に基づいています。

   (length=: %:@:+/@:*:) 5 12   NB.(5^2+12^2)=169 <= 13^2
13
   disp=: ] - 1&|."1   NB.5 12 - 12 5 => _7 7
   sides=: length@disp  NB.(_7^2 + 7^2)=98 <=9.89949^2
   semiper=: -:@(+/)@sides  NB.halves of sides
   HERON=: %:@(*/)@(semiper - 0: , sides)
   area=: -/ . * @ (] , %@!@#)
   t=: 0 0 4 ,: 3 4 7
   (];(1&|."1);disp;sides;semiper;HERON;area) t
 +-----+-----+-------+-----+---------+---------------+--+
 |0 0 4|0 4 0| 0 _4 4|0 4 4|0.5 3.5 4|2.29129 0j0.5 0|_2|
 |3 4 7|4 7 3|_1 _3 4|1 3 4|         |               |  |
 +-----+-----+-------+-----+---------+---------------+--+  
   tet1=:6 0 3 0,3 6 5 8,:7 4 0 5
   tet2=: 0,.=i.3 3
   tet1;(area tet1);tet2;(area tet2)
 +-------+----+-------+---------+
 |6 0 3 0|11.5|0 1 0 0|_0.166667|
 |3 6 5 8|    |0 0 1 0|         |
 |7 4 0 5|    |0 0 0 1|         |
 +-------+----+-------+---------+