## Introduction: MAT 594X_2.5D Pattern

The project is based on a linear extrusion of a pattern made out of triangulated point array.
I played with a combination of randomness, order, and attractor points. Below you can see the result.

Overall, the pattern may be too complicated to print. My computer crashed several times trying to unify these polygons via a boolean operation.

I tried to introduce noise and attractor points into the system as a means to complexity, but maybe it worked against the major task at hand --printability.

## Supplies

Rhino & Grasshopper

## Step 1: Completely Random

First, I played with simple implementation of randomness

`        if((i*j) % mod) == random.randint(1,5): `
`                pt.append(rs.CreatePoint(x, y, 0.0))`

## Step 2: Attractor Point With Randomness

Second, I aimed to create varying "densities" using an attractor point. The idea would be that the biggest concentration would be around this attractor point and the concentration would go down towards the periphery of the point array. The distribution in this gradient would be noisy.

I created a point in rhino and referenced this to a point param object in GH. This is the attractor point. Calculated the distance between this point and any given point. att is the attractor point.

`myDist = math.sqrt((att.X - x)*(att.X - x) + (att.Y - y)*(att.Y - y))`

Scaled the distance between the attractor point and any given point to a range of 0 and 1.

`maxDist =  math.sqrt((p2.X-p1.X)*(p2.X-p1.X) + (p2.Y-p1.Y)*(p2.Y-p1.Y))`
`distMapped = abs(1 - myDist / maxDist) `

Also created a random number between 0 and 1

`r = random.random(); `

If the distance between the attractor point and any given point in the array is below an arbitrary input value (dist), the points get appended to the array. This creates a uniform distribution around the attractor point.

At the same time, if the normalized distance between the attractor point and any given point is below a random number, this point also gets appended to the array. The bigger the distance, the less likely the condition will pass, so the density goes down towards the periphery.

Please note that the attractor point is at the geometric center of the point array.

`if(myDist < dist) | (r <= distMapped * distMapped):`
`       pt.append(rs.CreatePoint(x, y, 0.0))`

## Step 3: Order and Attractor

#This one is a combination of simple pattern and the distance between an attractor point and any given point. Note that the attractor point is at the very center in these renderings.

` if(myDist < dist) | ((i*i - j*j) % 5 == 0): `
` pt.append(rs.CreatePoint(x, y, 0.0))`

## Step 4:

Step 3 with 2 attractor points