Picking a random point along the edge of an area
Examples of smooth manifolds admitting inbetween one and a continuum of complex structures
Forming a German sentence with/without the verb at the end
How to tell a function to use the default argument values?
ssTTsSTtRrriinInnnnNNNIiinngg
Is there an expression that means doing something right before you will need it rather than doing it in case you might need it?
Why didn't Miles's spider sense work before?
Method Does Not Exist error message
What is the most common color to indicate the input-field is disabled?
Does the Idaho Potato Commission associate potato skins with healthy eating?
Unlock My Phone! February 2018
Can we compute the area of a quadrilateral with one right angle when we only know the lengths of any three sides?
Is "remove commented out code" correct English?
Venezuelan girlfriend wants to travel the USA to be with me. What is the process?
Why doesn't using multiple commands with a || or && conditional work?
What is a romance in Latin?
Calculating entropy change: reversible vs irreversible process
Why can't we play rap on piano?
What killed these X2 caps?
Why do bosons tend to occupy the same state?
Forgetting the musical notes while performing in concert
How seriously should I take size and weight limits of hand luggage?
Running Low on Limestone
How can I deal with my CEO asking me to hire someone with a higher salary than me, a co-founder?
Bullying boss launched a smear campaign and made me unemployable
Picking a random point along the edge of an area
$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. 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. 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. 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. Any input here would be appreciated.
clojure fractals
clojure fractals
asked 2 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');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
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');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
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');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
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');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
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');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
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