この前輪読していた時に、先生が「ベン図も描けなかったらプログラムとか書けるわけねーだろ」と言っていて、俺もうーん記号論理とかよくわからないな…と思ったので(少しショックだった)

とりあえずベン図をFlashで描いてみた。

SourceCode(Flash8, AS2)

あとは∧∨¬⇒⊂と()の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);

}