Picking a random point along the edge of an areaPicking a random state from a set based on probabilities
Different meanings of こわい
How can I deal with my CEO asking me to hire someone with a higher salary than me, a co-founder?
ssTTsSTtRrriinInnnnNNNIiinngg
Can compressed videos be decoded back to their uncompresed original format?
Examples of smooth manifolds admitting inbetween one and a continuum of complex structures
iPad being using in wall mount battery swollen
Short story with a alien planet, government officials must wear exploding medallions
What does “the session was packed” mean in this context?
Is "remove commented out code" correct English?
Is it inappropriate for a student to attend their mentor's dissertation defense?
How seriously should I take size and weight limits of hand luggage?
Probability that a draw from a normal distribution is some number greater than another draw from the same distribution
Why do bosons tend to occupy the same state?
Detention in 1997
Why can't we play rap on piano?
In 'Revenger,' what does 'cove' come from?
What killed these X2 caps?
How do I handle a potential work/personal life conflict as the manager of one of my friends?
Avoiding the "not like other girls" trope?
What method can I use to design a dungeon difficult enough that the PCs can't make it through without killing them?
What is a romance in Latin?
What's the in-universe reasoning behind sorcerers needing material components?
How to tell a function to use the default argument values?
Why didn't Miles's spider sense work before?
Picking a random point along the edge of an area
Picking a random state from a set based on probabilities
$begingroup$
I'm writing a Diffusion-limited aggregation simulation, and need to pick a random point along the edge of an area defined by a dimension pair of [width, height]. The point shouldn't be deep within the area; it should always be on the border of one of the sides. This is the intended behavior:
(let [rand-gen (Random.)
dims [21 11]]
(dotimes [_ 25]
; I'm casting to int so the output it legible
; I actually need doubles
(println
(mapv int (random-edge-coord dims rand-gen)))))
[13 0]
[0 8]
[15 10]
[8 10]
[20 0]
[0 6]
[20 2]
[0 5]
[7 10]
[0 7]
[0 10]
[20 1]
[6 0]
[20 0]
[0 2]
[20 10]
[15 0]
[14 0]
[7 0]
[0 7]
[12 0]
[20 7]
[20 4]
[20 8]
[20 4]
This is the mess I came up with:
; These two functions are just for the sake of a MCVE
(defn- random-boolean [^Random rand-gen]
(.nextBoolean rand-gen))
(defn- random-double [min, max, ^Random rand-gen]
(let [r (.nextDouble rand-gen)
spread (- max min)
rand (* spread r)]
(+ rand min)))
(defn random-edge-coord [dimensions, ^Random rand-gen]
(let [[w h] dimensions
vertical? (random-boolean rand-gen)
start? (random-boolean rand-gen)
x (if vertical?
; Pick either the left or right edge
(if start?
0
(dec w))
; Else, pick a random point along the top/bottom egde
(random-double 0 w rand-gen))
y (if vertical?
(random-double 0 h rand-gen)
(if start?
0
(dec h)))]
[x y]))
The redundancy is killing me though. I can't think of how to clean it up. I feel like this should be fairly straightforward to generalize, but I'm stuck. I figured I could clean up the start? check a bit using an anonymous function like #(if start? 0 (dec %)), which gets rid of the branching lower down, but that's not a huge gain.
Any input here would be appreciated.
clojure fractals
$endgroup$
add a comment |
$begingroup$
I'm writing a Diffusion-limited aggregation simulation, and need to pick a random point along the edge of an area defined by a dimension pair of [width, height]. The point shouldn't be deep within the area; it should always be on the border of one of the sides. This is the intended behavior:
(let [rand-gen (Random.)
dims [21 11]]
(dotimes [_ 25]
; I'm casting to int so the output it legible
; I actually need doubles
(println
(mapv int (random-edge-coord dims rand-gen)))))
[13 0]
[0 8]
[15 10]
[8 10]
[20 0]
[0 6]
[20 2]
[0 5]
[7 10]
[0 7]
[0 10]
[20 1]
[6 0]
[20 0]
[0 2]
[20 10]
[15 0]
[14 0]
[7 0]
[0 7]
[12 0]
[20 7]
[20 4]
[20 8]
[20 4]
This is the mess I came up with:
; These two functions are just for the sake of a MCVE
(defn- random-boolean [^Random rand-gen]
(.nextBoolean rand-gen))
(defn- random-double [min, max, ^Random rand-gen]
(let [r (.nextDouble rand-gen)
spread (- max min)
rand (* spread r)]
(+ rand min)))
(defn random-edge-coord [dimensions, ^Random rand-gen]
(let [[w h] dimensions
vertical? (random-boolean rand-gen)
start? (random-boolean rand-gen)
x (if vertical?
; Pick either the left or right edge
(if start?
0
(dec w))
; Else, pick a random point along the top/bottom egde
(random-double 0 w rand-gen))
y (if vertical?
(random-double 0 h rand-gen)
(if start?
0
(dec h)))]
[x y]))
The redundancy is killing me though. I can't think of how to clean it up. I feel like this should be fairly straightforward to generalize, but I'm stuck. I figured I could clean up the start? check a bit using an anonymous function like #(if start? 0 (dec %)), which gets rid of the branching lower down, but that's not a huge gain.
Any input here would be appreciated.
clojure fractals
$endgroup$
add a comment |
$begingroup$
I'm writing a Diffusion-limited aggregation simulation, and need to pick a random point along the edge of an area defined by a dimension pair of [width, height]. The point shouldn't be deep within the area; it should always be on the border of one of the sides. This is the intended behavior:
(let [rand-gen (Random.)
dims [21 11]]
(dotimes [_ 25]
; I'm casting to int so the output it legible
; I actually need doubles
(println
(mapv int (random-edge-coord dims rand-gen)))))
[13 0]
[0 8]
[15 10]
[8 10]
[20 0]
[0 6]
[20 2]
[0 5]
[7 10]
[0 7]
[0 10]
[20 1]
[6 0]
[20 0]
[0 2]
[20 10]
[15 0]
[14 0]
[7 0]
[0 7]
[12 0]
[20 7]
[20 4]
[20 8]
[20 4]
This is the mess I came up with:
; These two functions are just for the sake of a MCVE
(defn- random-boolean [^Random rand-gen]
(.nextBoolean rand-gen))
(defn- random-double [min, max, ^Random rand-gen]
(let [r (.nextDouble rand-gen)
spread (- max min)
rand (* spread r)]
(+ rand min)))
(defn random-edge-coord [dimensions, ^Random rand-gen]
(let [[w h] dimensions
vertical? (random-boolean rand-gen)
start? (random-boolean rand-gen)
x (if vertical?
; Pick either the left or right edge
(if start?
0
(dec w))
; Else, pick a random point along the top/bottom egde
(random-double 0 w rand-gen))
y (if vertical?
(random-double 0 h rand-gen)
(if start?
0
(dec h)))]
[x y]))
The redundancy is killing me though. I can't think of how to clean it up. I feel like this should be fairly straightforward to generalize, but I'm stuck. I figured I could clean up the start? check a bit using an anonymous function like #(if start? 0 (dec %)), which gets rid of the branching lower down, but that's not a huge gain.
Any input here would be appreciated.
clojure fractals
$endgroup$
I'm writing a Diffusion-limited aggregation simulation, and need to pick a random point along the edge of an area defined by a dimension pair of [width, height]. The point shouldn't be deep within the area; it should always be on the border of one of the sides. This is the intended behavior:
(let [rand-gen (Random.)
dims [21 11]]
(dotimes [_ 25]
; I'm casting to int so the output it legible
; I actually need doubles
(println
(mapv int (random-edge-coord dims rand-gen)))))
[13 0]
[0 8]
[15 10]
[8 10]
[20 0]
[0 6]
[20 2]
[0 5]
[7 10]
[0 7]
[0 10]
[20 1]
[6 0]
[20 0]
[0 2]
[20 10]
[15 0]
[14 0]
[7 0]
[0 7]
[12 0]
[20 7]
[20 4]
[20 8]
[20 4]
This is the mess I came up with:
; These two functions are just for the sake of a MCVE
(defn- random-boolean [^Random rand-gen]
(.nextBoolean rand-gen))
(defn- random-double [min, max, ^Random rand-gen]
(let [r (.nextDouble rand-gen)
spread (- max min)
rand (* spread r)]
(+ rand min)))
(defn random-edge-coord [dimensions, ^Random rand-gen]
(let [[w h] dimensions
vertical? (random-boolean rand-gen)
start? (random-boolean rand-gen)
x (if vertical?
; Pick either the left or right edge
(if start?
0
(dec w))
; Else, pick a random point along the top/bottom egde
(random-double 0 w rand-gen))
y (if vertical?
(random-double 0 h rand-gen)
(if start?
0
(dec h)))]
[x y]))
The redundancy is killing me though. I can't think of how to clean it up. I feel like this should be fairly straightforward to generalize, but I'm stuck. I figured I could clean up the start? check a bit using an anonymous function like #(if start? 0 (dec %)), which gets rid of the branching lower down, but that's not a huge gain.
Any input here would be appreciated.
clojure fractals
clojure fractals
asked 3 mins ago
CarcigenicateCarcigenicate
3,82811632
3,82811632
add a comment |
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function ()
return StackExchange.using("mathjaxEditing", function ()
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix)
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
);
);
, "mathjax-editing");
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "196"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f216819%2fpicking-a-random-point-along-the-edge-of-an-area%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Code Review Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f216819%2fpicking-a-random-point-along-the-edge-of-an-area%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown