I think the easiest way is to adjust the linear random function so that
it produces higher numbers more frequently than lower numbers. More
precisely, the frequency of 10 must be four times that of 5 (because the
area quadruples if you double the radius). Or else the outer points have
a lower probability of being found.
If you replace
put random(200) into tR -- 200 is half the width of the larger circle
by
put sqrt(random(1000^2))/1000*200 into tR -- 200 is half the width of
the larger circle
you get random numbers that fulfil these requirements.
If you only want to test whether a certain point is within the inner
corcle, you only need to look at the radius. But I assume you need this
in a more complicated situation.
I hope this helps
Thomas
Am 03.09.2020 um 19:21 schrieb Roger Guay via use-livecode:
Or to put it simply, how would one select random point (e.g. in a circle)
using Polar Coordinates??
Roger
On Sep 3, 2020, at 8:17 AM, Roger Guay via use-livecode
<use-livecode@lists.runrev.com> wrote:
Jerry,
You’ve done a very nice job of describing what’s actually(?) happening in my
code, but I think you missed the point of my question.
You agree that if you simply sample random pixels then the ratio of a random
pick inside the smaller circle will depend on the area of the circles.
And, if I pick a random x and y within the concentric circles of radius R and
2R, ¼ of the time they will lie in the smaller circle and ¾ of the time in the
bigger.
So, pick any random x and y and convert to radial coordinates. Everything
should work!
In my code I pick a random angle and a random radius (radial coordinates)
within the limits of the larger circle, thus picking random points within the
area of the larger circle, yet I get ½ (which you say is the right answer).
My intent was to pick random points (using radial coordinates) for which the
result should be ¼!
What’s wrong with my code?
Thanks,
Roger
On Sep 2, 2020, at 8:27 PM, Jerry Jensen via use-livecode
<use-livecode@lists.runrev.com> wrote:
1/2 is the right answer.
Take your drawing of the circles. Cut a verrrryy thin radial slice from the
center to the outside circle. So thin that it is just a line.
Now think of how likely a random point on that line will be in the part of the
line that was in the smaller circle. The part that was from the smaller circle
is HALF as long as the entire line.
Now add up all the possible positions of that line. Why would that change the
answer?
Congratulations, you understand integrals!
.Jerry
On Sep 2, 2020, at 7:38 PM, Roger Guay via use-livecode
<use-livecode@lists.runrev.com> wrote:
Your chance to be Genius du Jour:
If I construct 2 concentric circles, one being half the radius of the larger,
then simple math shows that the smaller circle has an area ¼ the area of the
larger.
Now if I generate a random point within the radius of the larger circle, I
should expect that the probability of it landing in the smaller circle to be ¼.
But, I must be doing something wrong because I get ½ !
Here is my script:
on mouseDown
getStuff
end mouseDown
local tR, tTheta, tX0, tY0, tX1, tY1, tTotCount, tL, tLongCount
on getStuff
put item 1 of the loc of grc OuterCircle into tx0
put item 2 of the loc of grc OuterCircle into tY0
put "" into tTotCount
put "" into tLongCount
emptyFlds
end getStuff
on mouseUp
lock screen
repeat 1000
put random(200) into tR -- 200 is half the width of the larger
circle
if tR > 1 then
## put random(2*pi) into tTheta1
get random(360)
put it*pi/180 into tTheta1
put tR*cos(tTheta1) into tX1
put tR*sin(tTheta1) into tY1
set the loc of grc Ptgrc to tX0 + tX1, tY0 - tY1 ---
grc Ptgrc is a 2 pixle oval
if intersect(grc Ptgrc, grc InnerCircle, "opaque
Pixels") then add 1 to tLongCount
add 1 to tTotCount
end if
end repeat
put tTotCount into fld "totcountFld"
put tLongCount into fld “LongCountFld"
put tLongCount/tTotCount into fld "RatioFld"
unlock screen
end mouseUp
Apparently, this does not generate a random point within the larger circle! Can
someone please tell me what’s wrong here?
Thanks,
Roger
_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode
_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode
_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode
_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode
_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode