Cells are able to interact with their surrounding extracellular matrix (ECM) and can both apply as well as respond to forces exerted by the ECM. For our project, we simulate an interlinked network of fibers that would act as the ECM and see how the network changes in response to movement of one of the points. The ECM is modeled as an interlinked system of springs that are initially at equilibrium with a net force of zero. As force is applied to the network in response to the point movement, we try to get the connected points to react to the force in such a way that they attempt to return to equilibrium. The force is monitored by the equation F=k*x where k is the spring constant and x is the change in fiber length. This simulation can help give a general understanding of force propagation in fibrous networks which can eventually be used to help simulate mechanotransduction.
Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.
Step 1: Generate an NxN Matrix of Uniform Squares
To start off the code, we choose N which will determine the dimensions of our network (NxN). The value of N can be manually changed to change the network dimensions as needed. In this example, N=8 so we have an 8x8 network of points. After we generate the matrix, we connect all the points in the matrix that have a length of 1 unit using the distance formula, distance = sqrt((x2-x1)^2+(y2-y1)^2). By doing this, we get a networks of squares that are all equally spaced out by 1 unit. This can be seen in figure 101.
Step 2: Randomizing the Network
In this step, we want to randomize all the point locations except the outer points which will form our boundary. To do this, we first find all the matrix coordinates that are equal to 0 or N. These points are the ones that make up the boundary. For the non-boundary points, the location is randomized by adding a different random value from -.5 to .5 to both the x and y positions. The plotted randomized image can be seen in Figure 1.
Step 3: Get New Distances
Once our randomized network is made, we find the distance between connected points using the distance formula again.
Step 4: Select a Point and Compare the Distance From That Point to Others
In this step, we can select a point of interest using the cursor, as shown in Figure 2. You do not need to move your cursor exactly onto the point because the code will adjust it to the nearest connection point. To do this, we first calculate the distance between the all connected points and the point we just selected. After all the distances are calculated, we select the point with the smallest distance from the selected point to become the actual selected point.
Step 5: Move to a New Point
In this step, using the point that was selected in the previous step, we move the point to a new location. This movement is done by selecting a new position with the cursor that will replace the previous position. This movement will be used to simulate an exerted force due to change in spring length. In the all blue figure, a new location is being selected. In the next figure, the movement can be visualized with by the orange connections which are the new locations as opposed to the blue connections which were the old locations.
Step 6: Force = K*distance
In this step we apply the equation force=k*distance, where k is a constant 10 for collagen fibers. Because the fiber network starts at its equilibrium state, the net force is 0. We create a zero vector the length of the matrix we generated earlier to represent this equilibrium.
Step 7: Change Network Movement Due to the Moved Point
In this step, we simulate the movement of the network in response to the point movement in order to return to its equilibrium state. We start by finding the new distances between two points. With this we can find the change in fiber length by looking at the difference between the old and new distances. We can also see which points have moved and also the points that they are connected to by comparing the new and old point locations. This allows us to see which points should move in response to the exerted force. The direction of the movement can be broken down into its x and y components, giving a 2D direction vector. Using the k value, change in distance, and direction vector, we can calculate the force vector which can be used to move our points toward equilibrium. We run this section of the code 100 times, each time moving in increments of Force*.1. Running the code 100 times allows us to eventually reach equilibrium again and by keeping boundary conditions we see a change in the network instead of simply an entire shift. The network movement can be seen in Figure 3 with the yellow being the moved positions and the blue being the previous ones.
Step 8: Finished Code
Attached in this section is a copy of our code. Feel free to modify it to suit your needs with modeling various networks!