# 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 others

Maybe 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 to `translate(x,y)` the maximum leg length or width or just draw the legs at the position you want them to. In your `legs()` function you do have the parameters `x` and `y` 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 use

``````min_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 chaotic

i hope my text is not too incomprehensible

regards David

• @mrrouge

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 a `while` 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

`````` 