flowerPower!
FlashCS5のデバッグ
多分なんかいままで見てくれてなかった
ところまで見てくれてるんだと思うんだけど
あからさまに重くなってる…
花の形を生成する関数の実験
先の直線と直線の交点を求める関数は
とりあえずはこれの為に作ってます
使いどころは他にもたくさんありますけど
目下これのために作りました
import simplizer.graphic.Pict
import flash.geom.Point;
var pct=addChildAt(new Pict(),0)
pct.onFrame=update
var flowerPointsList:Array=new Array()
function update(){
pct.clear()
var petal=Pict.petalPoints()
var newFlower=Pict.flowerPoints(null,Math.random()*10+20,Math.random()*3+3,Math.floor(Math.random()*7+5))
flowerPointsList.unshift(Pict.slide(newFlower,{x:mouseX+Math.random()*300-150,y:mouseY+Math.random()*300-150}))
while(flowerPointsList.length>60)flowerPointsList.pop()
flowerPointsList=Pict.transEach(flowerPointsList,Pict.swell,new Point(mouseX,mouseY),400,10)
pct.fillEach(flowerPointsList,[{curve:true,H:120,alpha:0},{H:0,alpha:1},{H:30,alpha:0}])
}
こういう事が大体こんなぐらいのコードでできます
それがPictクラス
この花の他に矢印とハートも作ったんですが
これが一番使いやすいだろうってことでこれだけ紹介
やっとPictクラスがPictクラスらしくなってきました
直線の交点を求める
前のは『線分が交わる場合にその交点を返す』ってもの
Box2D用に多角形の各辺が交じわるときに
その交点を求めるってのが主な目的でした
今回は『点Aを角度Aで通る直線と
点Bを角度Bで通る直線の
交点を求める処理』です
こっちの方が簡単なはずなんだけど
なんか最初回りくどいやりかた
しようとして無駄に時間食いました
getPlrCrs(点A,角度A,点B,角度B)
で点を返してきます
角度はラジアンです
public static function getPlrCrs(PntA:Point,RA:Number,PntB:Point,RB:Number):Point{
if(PntA.equals(PntB)){
return PntA.clone()
return;
}
if(RA%Math.PI==RB%Math.PI){
return null
return;
}
var vec:Point=PntB.subtract(PntA)
var R=Math.atan2(vec.y,vec.x)+Math.PI/2
var R1=R-RA
var R2=RB-R
return PntA.add(Point.polar(vec.length/(Math.tan(R1)+Math.tan(R2))/Math.cos(R1),RA))
}
処理はおおまかに言えば
点Aから目的の交点までの距離を
点A点Bの距離から三角関数を
ごにょごにょして求めて
点Aから角度Aでその距離
行った所の点を求める
っていうカンジです
点Aと点Bと交点の三角形に
交点からABに垂線を引いた図を考えると
どういうことやってるのかわかると思います
上のほうのif文は
そもそも点Aと点Bが同じならそれ返す
直線が平行だったら解なし
っていうことをやってるだけです
