[ActionScript]の最近のブログ記事

スプライン補間があんまり混雑な計算になってしまうので
いろいろ探してたら「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 未満の異なる数値が返されますが、
それぞれが同じ値であれば、常に同じ値を返します。


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
英語の苦手な僕は、いままで何となくで読んでいたのだけれども
実際になんて読むのかを goo で調べてみた。
ちなみに右のカッコは勝手にカタカナ読みになおしてみた。

parent(ペアレント)
length(レンクス)
width(ウィドゥス)
height(ハイト)
depth(デプス)
while(ワイル)
previous(プリビュース)

HTMLの href が未だに何て読んでいいのか分からない。
自分の中では「ハレフ」(そのまま)なんだけど口にすることはまず無い。
ちなみに href は Hypertext Reference の略らしいですね。

誰か教えてください。
最大値と最小値が決まっていて、その間の値を取るときに
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使った方が書くのが楽チンだから
ついついやってしまうのでメモメモ。