Advertisement
Guest User

Untitled

a guest
Dec 18th, 2014
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.67 KB | None | 0 0
  1. program new;
  2. {$DEFINE E_HIDE_ALL}
  3. {$I SimbaExt/SimbaExt.simba}
  4.  
  5. function __gammavar(alpha,beta:Double): Double;
  6. var
  7. u1,u2,b,c,v,z,r,ainv:Double;
  8. const
  9. MAGIC_CONST := 1.0 + Ln(4.5);
  10. begin
  11. if alpha > 1.0 then
  12. begin
  13. ainv := Sqrt(2.0 * alpha - 1.0);
  14. b := alpha - Ln(4);
  15. c := alpha + ainv;
  16. repeat
  17. u1 := Random();
  18. if not (0.0000001 < u1) and (u1 < 0.9999999) then
  19. continue;
  20. u2 := 1.0 - Random();
  21. v := Ln(u1 / (1.0 - u1)) / ainv;
  22. Result := alpha*Exp(v);
  23. z := u1 * u1 * u2;
  24. r := b + c * v - Result;
  25. until (r + MAGIC_CONST - 4.5*z >= 0.0) or (r >= Ln(z));
  26. Exit(Result * beta);
  27. end
  28. else if alpha = 1.0 then
  29. begin
  30. u1 := Random();
  31. while u1 <= 0.0000001 do u1 := Random();
  32. Exit(-Ln(u1) * beta);
  33. end else
  34. RaiseException('Alpha between 0 and 1 is not supported');
  35. end;
  36.  
  37. function Random(lo,hi:Double; density:Double=14):Double; overload;
  38. var v:Double;
  39. begin
  40. if density > 1 then
  41. begin
  42. v := __gammavar(density,1.0)
  43. if v = 0 then Exit(lo);
  44. Result := v / (v + __gammavar(density,1.0));
  45. end else
  46. Result := Random();
  47. Result := Result / 1.0 * (hi-lo) + lo;
  48. end;
  49.  
  50. function RandomPoint(mid:TPoint; radius:Int32; density:Double=14): TPoint;
  51. begin
  52. Result.x := Round( Random(mid.x-radius,mid.x+radius, density) );
  53. Result.y := Round( Random(mid.y-radius,mid.y+radius, density) );
  54. end;
  55.  
  56.  
  57. //plot
  58. var
  59. i:Int32;
  60. BMP:TRafBitmap;
  61. pt:TPoint;
  62. begin
  63. BMP.Create(500,500);
  64.  
  65. for i:=0 to 100000 do
  66. begin
  67. pt := RandomPoint([250,250],249, 5); //change the last param (density)
  68. BMP.Pixel(pt.x,pt.y, 255);
  69. end;
  70. BMP.Debug();
  71. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement