[ActionScript]の最近のブログ記事
スプライン補間があんまり混雑な計算になってしまうので
いろいろ探してたら「Catmull-Rom 補間」なるものを知りました。
p0 から p3 間にある点、p1、p2を通過する曲線を求めます。
得られる値は p1 から p2 までです。
Processing の curve() といっしょ。(←不確かですが...)
ただ Graphics.curveTo() で描くのはちょっと難しいっぽいです。
角っこがポコってなる。
3次ベジェをきっちり定義できれば curveTo() も使えるかも。
デモ(開曲線)
デモ(閉曲線)
参考 : http://markun.cs.shinshu-u.ac.jp/learn/cg/cg3/index5.html
いろいろ探してたら「Catmull-Rom 補間」なるものを知りました。
function CatmullRom(p0:Number, p1:Number, p2:Number, p3:Number, t:Number):Number
{
var v0:Number = (p2 - p0) / 2;
var v1:Number = (p3 - p1) / 2;
var t2:Number = t * t;
var t3:Number = t2 * t;
return (2 * p1 - 2 * p2 + v0 + v1) * t3 +
( -3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1;
}
t には 0.0 から 1.0 の係数が入ります。p0 から p3 間にある点、p1、p2を通過する曲線を求めます。
得られる値は p1 から p2 までです。
Processing の curve() といっしょ。(←不確かですが...)
ただ Graphics.curveTo() で描くのはちょっと難しいっぽいです。
角っこがポコってなる。
3次ベジェをきっちり定義できれば curveTo() も使えるかも。
デモ(開曲線)
デモ(閉曲線)
参考 : http://markun.cs.shinshu-u.ac.jp/learn/cg/cg3/index5.html
ランダムっぽく見えるけど何度実行しても同じ値が返される関数。
値は固定の値がほしいけど、一見ランダムに見える値がほしくて作ったもの。
param と i の値を変更すれば 0 以上 1 未満の異なる数値が返されますが、
それぞれが同じ値であれば、常に同じ値を返します。
値は固定の値がほしいけど、一見ランダムに見える値がほしくて作ったもの。
param と i の値を変更すれば 0 以上 1 未満の異なる数値が返されますが、
それぞれが同じ値であれば、常に同じ値を返します。
function quasiRandom( param:Number, i:Number ):Number
{
var PI:Number = 3.14159265358979;
var E:Number = 2.71828182845905;
var P:Number = PI * ( param + 0.5 );
var t:Number = 173*i*i*i;
var r:Number = (i*E+t)*P%1;
return r;
}
var param = 0.8;
trace( quasiRandom( param , 1 ) );// 0.645842281819569
trace( quasiRandom( param , 2 ) );// 0.556811317701431
trace( quasiRandom( param , 3 ) );// 0.998033861713338
trace( quasiRandom( param , 4 ) );// 0.234636667912127
trace( quasiRandom( param , 5 ) );// 0.53174649036373
trace( quasiRandom( param , 6 ) );// 0.154490083106793
trace( quasiRandom( param , 7 ) );// 0.367994200292742
最大値と最小値が決まっていて、その間の値を取るときに
Mathクラスのminとmaxを今まで使っていた。
でも、Mathクラスのmaxとminで比較するより、条件分岐を使った方が倍くらい早かった。
minとmax使った方が書くのが楽チンだから
ついついやってしまうのでメモメモ。
Mathクラスのminとmaxを今まで使っていた。
var res:Number = Math.min( 1 , Math.max( 0 , i ) );こんなふうに。
でも、Mathクラスのmaxとminで比較するより、条件分岐を使った方が倍くらい早かった。
var res:Number = ( i > 1 ) ? 1 : ( i < 0 ) ? 0 : i ;Function呼ばないから当たり前なんだろうけど、
minとmax使った方が書くのが楽チンだから
ついついやってしまうのでメモメモ。
