2011-05-19, 12:37
#1
Jag har en cirkel med centrum i origon och radien r, och jag vill ha slumpmässiga punkter som är jämnt fördelade över denna cirkel. Först tänkte jag att jag bara kan slumpa fram ett tal φ = [0, 2pi] och ett annat θ = [0, r] och sedan ta punkten θ(cos(φ), sin(φ)). Efter lite funderande kom jag på att jag kommer väl få mycket fler punkter nära cirkelns mitt än vad jag får i dess utkant? Tex kommer hälften ligga innanför cirkeln med radien r/2, även om denna bara utgör en fjärdedel av den totala arean. Ett sätt att lösa det på är att slumpa två värden α och β i intervallen [-r, r], och sedan kasta bort resultatet och göra det en gång till om α^2 + β^2 > r^2. Sannolikheten att det händer borde vara pi/4 (arean av cirkeln delat med arean av kvadraten), vilket gör det inte helt osannolikt att ganska ofta måste köras 2-4 gånger innan den hittar ett bra värde. Värt att nämna är att den här punkten ska slumpas fram 1024*1024*300 = 314 572 800 gånger, så det ska gärna gå snabbt.
Fler småfrågor: hur hur tung är sin och cos-beräkningar av en dator? Kan man anta att det görs någon polynomutveckling på 5-10 termer och alltså innebär 5-10 multiplikationer och additioner? Hur förhåller det sig till antar klockcykler för att generera ett slumpmässigt tal? Är eventuellt den andra metoden snabbare trots att den ibland måste köra flera gånger?
Om sannolikheten att den körs n gånger är 1 - (pi/4)^n, för n >= 1, hur många gånger kör den i genomsnitt (jag borde egentligen kunna räkna ut det här själv, men jag har lite tidspress och mycket annat att göra). tacksam för svar.
Fler småfrågor: hur hur tung är sin och cos-beräkningar av en dator? Kan man anta att det görs någon polynomutveckling på 5-10 termer och alltså innebär 5-10 multiplikationer och additioner? Hur förhåller det sig till antar klockcykler för att generera ett slumpmässigt tal? Är eventuellt den andra metoden snabbare trots att den ibland måste köra flera gånger?
Om sannolikheten att den körs n gånger är 1 - (pi/4)^n, för n >= 1, hur många gånger kör den i genomsnitt (jag borde egentligen kunna räkna ut det här själv, men jag har lite tidspress och mycket annat att göra). tacksam för svar.