## Documentation Center |

The model `sf_pool` is
an example of using matrices in a C chart to simulate the opening
shot on a pool table.

The model consists of the following blocks.

Model Component | Description |
---|---|

Init chart | Initializes the position and velocity of the cue ball. |

Pool chart | Calculates the two-dimensional dynamics of each ball on the pool table. |

Plot block | Animates the motion of each ball during the opening shot. |

Vel scope | Displays the velocity of each ball during the opening shot. |

Clock | Provides the instantaneous simulation time to the Plot block. |

To simulate the opening shot, the Pool chart stores two-dimensional data in matrices.

To store values for... | The Pool chart uses... |
---|---|

The instantaneous position of each ball | The 15-by-2 matrix p |

The instantaneous velocity of each ball | The 15-by-2 matrix v |

Friction and interaction forces acting on each ball | The 15-by-2 matrix v_dot |

Boolean data on whether any two balls are in contact | The 15-by-15 matrix ball_interaction |

The Pool chart calculates the motion of each ball
on the pool table using MATLAB^{®} functions that perform matrix
calculations.

MATLAB Function | Description |
---|---|

frictionForce | Calculates the friction force acting on each ball. |

getBallInteraction | Returns a matrix of Boolean data on whether any two balls are in contact. |

hasBallInteractionChanged | Returns 1 if ball interactions have changed and 0 otherwise. |

initBalls | Initializes the position and velocity of every ball on the pool table. |

interactionForce | Calculates the interaction force acting on each ball. |

isAnyBallGoingToStop | Returns 1 if any ball has stopped moving and 0 otherwise. |

isAnyBallNewlyPocketed | Returns 1 if any ball has been newly pocketed and 0 otherwise. |

isAnyBallOutOfBounds | Returns true if any ball is out of bounds and false otherwise. |

nearHole | Returns true if a ball is near a pocket on the pool table and false otherwise. |

pocketNewBalls | Sets the velocity of a ball to 0 if it has been pocketed. |

resetBallsPosAndVel | Resets the position and velocity of any ball that is out of bounds. |

updateStopFlags | Keeps track of which balls have stopped moving. |

To run the model, follow these steps:

Type

`sf_pool`at the MATLAB command prompt.Start simulation.

Click anywhere in the animated pool table to specify the initial position of the cue ball.

Click a different spot to specify the initial velocity of the cue ball.

Watch the balls move across the pool table.

Was this topic helpful?