Pay for Hesitation: 亂數球體座標

Pages

2010年10月12日 星期二

亂數球體座標

以下轉自ptt flash版


作者  kyzusmugoe (阿達達~鬼王達)                                 看板  Flash
標題  [問題] 想請教"亂數球體面積座標"的公式
時間  Wed Sep 15 21:58:44 2010


借用cj神的zedbox做demo一下~
swf : http://tinyurl.com/277plu2
其實wiki搜尋"球座標系"裡面就有答案 http://tinyurl.com/24796s6

以下是改過的code~
var rd:uint = 500;
var inclination:Number;
var azimuth:Number
for (var i:uint; i < 200; i++ )
{
    var zs:ZedSprite = new ZedSprite();
    inclination = Math.random() * Math.PI * 2;
    azimuth = Math.random() * Math.PI * 2;
    zs.x = rd * Math.cos(inclination) * Math.cos(azimuth);
    zs.y = rd * Math.sin(inclination) * Math.cos(azimuth);
    zs.z = rd * Math.sin(azimuth) ;
    container.addChild(zs);
}

======================================

作者  cjcat2266 (CJ Cat)                                         看板  Flash
標題  Re: [問題] 想請教"亂數球體面積座標"的公式
時間  Fri Sep 17 22:53:08 2010


其實有另外一招超簡單的偷吃步喔

就是直接用random做出一個亂數(x, y, z)座標向量
然後把這個向量標準化(normalize)之後調整長度為RADIUS

        var x:Number = Math.random() - 0.5;
        var y:Number = Math.random() - 0.5;
        var z:Number = Math.random() - 0.5;

        var factor:Number = RADIUS / Math.sqrt(x * x + y * y + z * z);

        x *= factor;
        y *= factor;
        z *= factor;

以上code參考自Flint Particles的SphereZone class
Stardust也是用這種方式取得亂數球體座標

雖然不是說很"均勻",但是我個人覺得夠用了
重點是計算很簡單,不太需要什麼大腦XD



沒有留言: