2.1 群論的作図法とは
著者:梅谷 武
語句:群論的作図法の原理について記す。
語句:群論的作図法の原理について記す。
群論的作図法, 図形クラス, 変換クラス
作成:2010-09-30
更新:2011-03-08
更新:2011-03-08
自然界に多くの対称性が見られるように、我々が作図の対象とする図形にも多くの対称性が見られる。このような図形の作図において、その対称性を有効に活用し、しかもその対称性の記述を群論的な記法により行なう作図法を群論的作図法ぐんろんてきさくずほう, group-theoretical drawingと呼ぶことにしよう。
ToposNoteにおいては、Luaにおける演算子定義とクラス記述により群論的作図法を実装する。この章はその原理と作図例を示すことを目的とする。
Luaにおいて図形と変換をそれぞれクラスとして実装し、図形クラスずけいくらす, figure classをF、変換クラスへんかんくらす, transformation classをTで表したときに、図形の変換を左からの作用
T * F
と表現し、さらに変換の合成も積*で表し、冪乗を
T^3 := T * ( T * T )
と表現できるようにする。また、T*Fにより図形に変換を施す際に行列スタックの状態を保存するようにして、push, popを書く手間を省く。std/Figure.lua
-- Figure class function new( def_func ) local obj = {} obj.type = "Figure" obj.func = def_func return obj end
std/Transformation.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 -- Transformation class function new( def_func ) local obj = {} obj.type = "Transformation" obj.func = def_func setmetatable( obj, { __mul = mul, __pow = pow } ) return obj end
語 句
群論的作図法 ぐんろんてきさくずほう, group-theoretical drawing図形クラス ずけいくらす, figure class
変換クラス へんかんくらす, transformation class
Published by SANENSYA Co.,Ltd.