This project has moved and is read-only. For the latest updates, please go here.

# Creating a very specific kind of a breakable body

 Topics: Developer Forum, User Forum Wiki Link: [discussion:360692]
 aRkker Jun 23, 2012 at 6:32 PM Hello. I just recently had to dive into the world of vertices and polygons due to my problem. I need to create a very specific kind of a breakable body circle. A picture is worth more than a thousand words so: https://dl.dropbox.com/u/16341234/demo.png This is the kind of a breakable body I need to be able to construct somehow.   My question is: Is there already functionality to achieve something like this or do I have to build the vertices myself? aRkker Jun 23, 2012 at 10:29 PM Edited Jun 23, 2012 at 10:30 PM Alright, I consulted a mathematician friend of mine and we came up with a solution. http://i.imgur.com/Nz6Xp.png    That is what the result looks like, and here is the function: ```public Body CreateFragmentedCircle(Vector2 center, float radius, int theta_divisions, int radial_divisions) { Body _body = new Body(_world); valmisBody.Position = new Vector2(-37, 0); List lista = new List(); Vector2 a, b, c, d = new Vector2(0, 0); for (int i = 0; i < theta_divisions; ++i) { Vertices v = new Vertices(); a = center; b = new Vector2((radius / radial_divisions) * (float)Math.Cos(i * 2 * (float)Math.PI / theta_divisions), (radius / radial_divisions) * (float)Math.Sin(i * 2 * (float)Math.PI / theta_divisions)) + center; c = new Vector2((radius / radial_divisions) * (float)Math.Cos((i + 1) * 2 * (float)Math.PI / theta_divisions), (radius / radial_divisions) * (float)Math.Sin((i + 1) * 2 * (float)Math.PI / theta_divisions)) + center; v.Add(a); v.Add(b); v.Add(c); PolygonShape polygonShape = new PolygonShape(v, .25f); Fixture fixture = _body.CreateFixture(polygonShape, null); } for (int i = 1; i < radial_divisions; ++i) { float modifier = theta_divisions + 10 * i; for (int j = 0; j < modifier; ++j) { Vertices v = new Vertices(); a = new Vector2((i * radius / radial_divisions) * (float)Math.Cos(j * 2 * (float)Math.PI / (modifier)), (i * radius / radial_divisions) * (float)Math.Sin(j * 2 * (float)Math.PI / (modifier))) + center; b = new Vector2(((i + 1) * radius / radial_divisions) * (float)Math.Cos(j * 2 * (float)Math.PI / (modifier)), ((i + 1) * radius / radial_divisions) * (float)Math.Sin(j * 2 * (float)Math.PI / (modifier))) + center; c = new Vector2(((i + 1) * radius / radial_divisions) * (float)Math.Cos((j + 1) * 2 * (float)Math.PI / (modifier)), ((i + 1) * radius / radial_divisions) * (float)Math.Sin((j + 1) * 2 * (float)Math.PI / (modifier))) + center; d = new Vector2((i * radius / radial_divisions) * (float)Math.Cos((j + 1) * 2 * (float)Math.PI / (modifier)), (i * radius / radial_divisions) * (float)Math.Sin((j + 1) * 2 * (float)Math.PI / (modifier))) + center; v.Add(a); v.Add(b); v.Add(c); v.Add(d); PolygonShape polygonShape = new PolygonShape(v, .25f); Fixture fixture = _body.CreateFixture(polygonShape, null); } } return _body; } ```     The parameters are quite simple:  - Vector2 center = the center point where to build the fragmented circle around - float radius = the radius of the circle - int theta_divisions = the amount of edges for the circle (I strongly suggest to use atleast 8) - int radial_divisions = the amount of "layers" of fragmented pieces (anything above 2 works, tho 2 itself looks very stupid if the theta_divisions is small)   Feel free to use and experiment with the code as you desire, I hope it's help for anyone who might've been struggling with the same thing. *** EDIT ***: The code isn't usable straight out of the pack apparentally, you might want to include a parameter for the world in to the parameter list as that code uses a public World _world variable