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

Reply via email to