Random Lines with no intersection
-
Hi its me again with another problem
newPage(2000, 2000) xMiddle = 2000/2 yMiddle = 2000/2 strokeWidht=2 g1=randint (20,100) g2=randint (500,900) g3=randint (20,100) g4=randint (20,100) g5=randint (20,100) w=1 h=1 def legs (x,y,w,h): scale(w, h) newPath() stroke(0) fill(None) strokeWidth(strokeWidht) polygon ((0,0),(g2,0),(g2,-g3),(g4,-g5),(g1,-g2),close=False) def legs2 (x,y,w,h): scale(w, h) newPath() stroke(0) fill(None) strokeWidth(strokeWidht) polygon ((0,0),(-g2,0),(-g2,-g3),(-g4,-g5),(-g1,-g2),close=False) # def wing (x,y): # newPath() # stroke(None) # fill(0,0,20, 0.5) # blendMode('exclusion') # strokeWidth(strokeWidht) # polygon ((0,29),(g2,g5),(g2,-g3),(g4,-g5),(g1,-g2),close=True) translate(xMiddle,yMiddle) rect(-20,-3,40,40) # wing(0,0) for i in range(4): g1=randint (20,100) g2=randint (20,644) g3=randint (20,100) g4=randint (20,100) g5=randint (20,100) translate (0,+i+5) legs(0,0,w,h) legs2(-0,-0,w,h)
I wrote this code which generates "legs "randomly
now Iam looking to generate these randomly without them intersecting each othersMaybe one of you have a little hint for me
Greetings David
-
@mrrouge
I am not quite sure if this is what you are asking for but you either need totranslate(x,y)
the maximum leg length or width or just draw the legs at the position you want them to. In yourlegs()
function you do have the parametersx
andy
but they are not used inside the function.Also I do recommend to use a variable if you repeatedly use the same value. So instead of
randint(20, 100)
you could usemin_val = 20 max_val = 100 randint(min_val, max_val)
I put together a simple “legs” drawing that might help.
Good luck# ------------- # settings pw = ph = 500 amount_x = 10 amount_y = 4 cell_w = pw / amount_x cell_h = ph / amount_y # ------------- # fucntion(s) def legs(pos, max_w, max_h): x, y = pos length = random() * max_h step_s = random() * max_w polygon((x - step_s, y - length) , pos, (x + step_s, y - length), close = False) # ------------- # drawings newPage(pw, ph) fill(None) stroke(0) strokeWidth(2) for x in range(amount_x): for y in range(amount_y): legs((x * cell_w + cell_w/2, y * cell_h + cell_h/2), cell_w/2, cell_h/2)
-
hey thanks for the answer
but its not totally what i meant
if I had to reformulate it now i would have asked for a function which scans the previous one and creates a random pair of legs "on top" of the other and places it without intersections ans rescans the newly created one again and again .
the basic "idea" of the sketch was how i wanted it
but the lines were too chaotici hope my text is not too incomprehensible
regards David
-
ok if i got you right you want the function to
return
a value — in your case the height of the legs. this value could then be used in awhile
loop. while loops are quite helpful but might run forever if done incorrect. I adapted the code a bit so the legs function returns the length of the legs which is then added to the y value in the while loop. There is a check inside the while loop so it will run for a maximum of 3000 times.# ------------- # settings pw = ph = 500 amount_x = 10 cell_w = pw / amount_x max_h = 50 gap = max_h * .2 # ------------- # fucntion(s) def legs(pos, max_w, max_h): x, y = pos length = random() * max_h step_s = random() * max_w polygon((x - step_s, y) , (x, y + length), (x + step_s, y), close = False) return length # ------------- # drawings newPage(pw, ph) fill(None) stroke(0) strokeWidth(2) for x in range(amount_x): count = 0 y = -random() * max_h while y < ph: y += legs((x * cell_w + cell_w/2, y), cell_w/2, max_h) y += gap count += 1 if count > 3000: break
and the while loop without the check:
for x in range(amount_x): y = -random() * max_h while y < ph: y += legs((x * cell_w + cell_w/2, y), cell_w/2, max_h) y += gap