唐突ですが
my $A = ['a1' , 'a2' , 'a3' , 'a4']; my $B = ['b1' , 'b2' , 'b3' , 'b4']; my $C = ['c1' , 'c2' , 'c3' , 'c4']; my $D = ['d1' , 'd2' , 'd3' , 'd4']; my @XY = ($A , $B , $C , $D ); #もしくはこっちの方が書き方キレイかな? # #my @A = qw(a1 a2 a3 a4); #my @B = qw(b1 b2 b3 b4); #my @C = qw(c1 c2 c3 c4); #my @D = qw(d1 d2 d3 d4); # #my @XY = \(@A , @B , @C , @D);
入れ子になったこんな配列があります。この配列はイメージとして
# 1 2 3 4 # #A a1 a2 a3 a4 #B b1 b2 b3 b4 #C c1 c2 c3 c4 #D d1 d2 d3 d4
こういう「平面」のようなものとして捉えられる。この配列を
my @Y_reversed; @Y_reversed = reverse @XY;
という風に、一次の深さの部分で配列をreverseすると
# 1 2 3 4 # #D d1 d2 d3 d4 #C c1 c2 c3 c4 #B b1 b2 b3 b4 #A a1 a2 a3 a4
このように上下対称にひっくり返る。
また
my @X_reversed; foreach(@X_reversed = @XY){ @{$_} = reverse @{$_}; }
のように二次の深さでreverseすると
# 4 3 2 1 # #A a4 a3 a2 a1 #B b4 b3 b2 b1 #C c4 c3 c2 c1 #D d4 d3 d2 d1
左右対称ににひっくり返った「平面」ができる。
あ いや なんでこんなことやってるかって言うと、
- a1 a2 ... aN の代わりにRGB(255,255,255)などの色情報を割り当てれば「画像」、いわゆる「ビットマップ」になるんじゃないかと思ったから。
- だとすると、ビットのマップを為す配列に操作を加えることでペイント系ツールの「左右対称に画像反転」「上下対称に画像反転」等々の操作を再現できるなーなと思ったから。
ので書いてみた。グラフィック操作に関してのプログラミングは全然知らんので、予想してみたんだけど、実際どうなんだろ。グラフィックソフトの中では(理論的には)こんな風にしてデータを操作してるんでしょか?おしえてエラい人・・・
ところで、やってる途中で行列とか線形代数の授業を思い出しました。行列はプログラミングと関係あるよ みたいな話はどっかで聞いた覚えがあったのだけどこういうことなのだろうか?大学でプログラミングの授業をとると教えてくれるのかな。