この前輪読していた時に、先生が「ベン図も描けなかったらプログラムとか書けるわけねーだろ」と言っていて、俺もうーん記号論理とかよくわからないな…と思ったので(少しショックだった)
とりあえずベン図をFlashで描いてみた。
あとは∧∨¬⇒⊂と()のparserを書けばいいんだな。なんだ、普通に木を作ればいいんだな。四則演算の+−と×÷みたいな優先順位が無いから楽だな。でも排他的論理和(これ ¬P)は記号2つだな。
なんか違う気がしてきた。
VennItem.as
ベン図の集合要素のベースクラス。集合なので、とりあえずItems:Arrayだけ持っている
classVennItemextendsMovieClip{
varItems:Array;functionVennItem(){
this.Items=newArray();
trace(“create:VennItem”);
}
}
Circle.as
円(見た目の定義).flaで円を描いてある。他に「全体」を表す四角があるがとりあえずそれは作ってない
classCircleextendsVennItem{
}
Venn.fla
指定した数の円をバランスよく配置する。sinとcosを使って円周上に配置。それぞれの半径と透明度を調整。どれかがクリックされたら、とりあえず全VennItemをhitTestする。
varnum=2;
varwidth:Number=640;
varheight:Number=480;
varr:Number=130;
varitems:Array=newArray();
setCircles(textNum.text);functionsetCircles(num):Array{
for(vari=0;i
vardepth=this.getNextHighestDepth();
varc=this.attachMovie(“Circle”,”circle”+depth,depth);
c._x=this.r*Math.cos((i/num-1/4)*2*Math.PI)+this.width/2;
c._y=this.r*Math.sin((i/num-1/4)*2*Math.PI)+this.height/2;
c._height=c._width=2*this.r*1.5;
c._alpha=20;
this.items.push(c);
c.onRelease=this.onClick;
}
returnitems;
}functiononClick():Void{
varhits=newArray();
for(vari=0;i
mc=items[i];
if(mc.hitTest(_root._xmouse,_root._ymouse,true)){
hits.push(mc);
}
}
textResult.text=hits;
}buttonReload.onRelease=function(){
trace(“reload”);
while(_root.items.length){
_root.items.shift().removeMovieClip();
}
setCircles(textNum.text);
}