2.1節 群論的作図法
著者:梅谷 武
語句:群論的作図法, Lua, 演算子定義
ToposNoteにおける群論的作図法について述べる。
作成:2010-03-23
更新:2021-07-01
 本節の目的は、ToposNote上でLuaによる演算子定義機能を使って、図形の変換を群論的に表現することにあります。
 Luaにおいて図形と変換をそれぞれクラスとして実装し、図形クラスをF、変換クラスをTで表したときに、図形の変換を左からの作用
T * F
と表現し、さらに変換の合成も積*で表し、冪乗を
T^3 := T * ( T * T )
と表現できるようにします。また、T*Fにより図形に変換を施す際に行列スタックの状態を保存するようにして、push, popを書く手間を省きます。
算譜2.1.2.2 std/FigureClass.lua
-- operator *
function mul( a, b )
  if ( ( a.type == "Transformation" ) and ( b.type == "Figure" ) ) then
    dxPushMatrix()
      a.func()
      b.func()
    dxPopMatrix()
  elseif ( ( a.type == "Transformation" ) and ( a.type == b.type ) ) then
    local tmp = function()
      a.func()
      b.func()
    end
    return new( tmp )
  else
  end
end
 
-- operator ^
function pow( a, n )
  if ( a.type == "Transformation" ) then
    local tmp = function() end
    local answer = new( tmp )
    while n > 0 do
      if ( n % 2 == 1 ) then
        answer = answer * a
      end
      a = a * a
      n = math.floor( n / 2 )
    end
    return answer
  else
  end
end
 
-- Figure class
function new( def_func )
  local obj = {}
  obj.type = "Figure"
  obj.func = def_func
  return obj
end
 
-- Transformation class
function new( def_func )
  local obj = {}
  obj.type = "Transformation"
  obj.func = def_func
  setmetatable( obj, { __mul = mul, __pow = pow } )
  return obj
end
 本文書内のサンプルプログラムは、ToposNoteの配布物に同梱されています。これらについては、自由な使用・改変・再配布が許諾されています。さらに再配布にあたり、著作権表示をする必要はありません。
[1] 梅谷 武, ToposNote2マニュアル, pisan-dub.jp, 2010
[2] 上野 豊, 入門Luaプログラミング, ソフトバンククリエイティブ, 2007
img
 
 
[3] Roberto Ierusalimschy, Programming in Lua プログラミング言語Lua公式解説書, アスキー・メディアワークス, 2009
img
 
 
Published by SANENSYA Co.,Ltd.