2012-10-26 73 views
3

我正在尋找一種產生類似於鐘形曲線(想象)的數學函數。這裏我非常深入。我認爲高斯函數可能是我需要的,但我不知道如何正確地將它應用於我的目的。在鐘形曲線上分配數字

我將使用功能動畫在一系列對象:

enter image description here

我想通過偏移每個來模擬這個動畫的加速和減速的外觀對象更接近前面的一個,直到中途點,在此之後,抵消增加回原來的值:

enter image description here

一旦實施,我想要的功能到接受x軸上的開始點和結束點以及需要調整的對象數量。它應該返回一系列值,這些值將是每個對象的x原點。

例如:

開始:0 結束:100個 對象:20

平分佈:0,5,10,15,20,25,30,35,40,45,50 ,55,60,65,70,75,80,85,90,95

要求的結果:0,10,19,27,34,40,44,45,46,47,48,49,50 ,51,55,60,66,73,81,90

對曲線輪廓的一些控制也很好 - 例如,我估計的v上面的線索是一個相當平坦的鐘(項目7-14有相同的偏移量)。

+1

這被稱爲生成變體。我們在這裏說什麼電腦語言? –

+1

也被稱爲「偏離」。 –

+0

我將在objective-c中實現它。感謝提示 - 所有好的谷歌果汁。 –

回答

3

考慮以下三次多項式:

f(x,a) = 4ax^3 - 6ax^2 + 2ax + x 

上評估域x in [0:1]a保持恆定並且從區間選取`[0:1]」。

這將生成從零開始並結束於一的繪圖。如果a==0,你會得到一條直線。如果a==1,你會得到一個深刻的曲線。對於a之間的某處,你會得到一些介於兩者之間的東西。

一旦您爲a選擇了一個合適的值,您只需評估0到1之間的任意多個點。然後將這些值縮放以適合您想要的範圍。


電子表格的這個屏幕截圖給出了兩個例子。列A和F的值爲a,列B和G的值爲x(如果您想使用平攤分配中的確切值,則可以將x的每個用法更改爲x/100)。 C欄和H欄的結果爲f(x,a)。 D欄和I欄按住f(x,a)*100

Spreadsheet screenshot

+0

這完美的作品爲我的目的。 –

+0

Ha我現在在桌面上打開幾乎完全相同的電子表格。非常感謝。 –

+1

@BenPackard對於它的價值,我發現這是說我想要一個三次函數f(x)= Ax^3 + Bx^2 + Cx + D'。然後我說f(0)= 0,f(1)= 1,f'(。5)= a',f('5)= 0'。然後我解決了(A,B,C,D)'。 – JCooper

0

IIRC在[-1..1]之外的N個獨立隨機數之和給出了以0爲中心的高斯曲線的一個很好的近似值,我不記得什麼是離差。

編輯:不明白的問題。你似乎需要一些實現this的東西,正是「反向錯誤函數」,你可能希望它的近似值在你的代碼中實現,因爲函數本身是一個整數,不能在初等函數中求值。一旦你得到的函數爲鐘形曲線點提供了正確的近似值,你明確地以0-1數字爲基礎(它將定義鐘形曲線的平坦度),將其命名爲B,並將N個數字均勻分佈在(-1 + B)和(1-B),然後將該函數的輸出作爲鐘形曲線位置,然後對它們進行歸一化,以使最左邊的位於開始位置,最後位於最右邊。

2

這裏是產生偏離正常的Java實現:

/** generation of a Gaussian deviates (variants) by the ratio of uniform method */ 
final public static double generateNormalDeviate(final double mean, final double std_deviation){ 
    double u, v, x, y, q; 
    do { 
     u = random.nextDouble(); 
     v = 1.7156 * (random.nextDouble() - 0.5); 
     x = u - 0.449871; 
     y = (v < 0 ? v * -1 : v) + 0.386595; 
     q = x*x + y * (0.19600 * y - 0.25472 * x); 
    } while(q > 0.27597 && 
      (q > 0.27846 || v*v > -4d * Math.log(u) * u*u)); 
    return mean + std_deviation * v/u; 
} 

請參閱數字食譜由出版社以獲取更多信息和C版本。

+0

這對我來說有點難以消化...隨機的目的是什麼?爲什麼它是必需的?我也無法找到你提到的參考。 –

+0

該函數生成正態分佈的隨機值。這本書是http://www.amazon.com/Numerical-Recipes-3rd-Scientific-Computing/dp/0521880688/ref=sr_1_1?s=books&ie=UTF8&qid=1351273273&sr=1-1&keywords=numeric+recipes –