# Versailles's Floor generator # Introduction Versailles's floor is a puzzle: many pieces to assemble together. I wanted to create a simple simulator for the most common pattern. # Simulator This is a simple javascript simulator, made with [Bokeh](https://docs.bokeh.org/en/latest/). You can play with using two sliders: - The `R` slider modifies the trade-off between the square and the lines (of lenght `a` and `b` respectively). - The `length` slider doesn't change anything visual, this is only if you don't want to compute the size of the pieces yourself. The length represents the total length (borders included). {% include versailles.html %} # Formulas We will first forget about the total length. The reference unit will be `R`, the ratio between the large squares, and the spacing rectangles. ![](/assets/images/Versailles/versailles_whiteB.png) ## Main Components Edge of `A`: $$a = R$$ Width of `B`: $$b = 1 - R$$ from which you get the diagonal: $$D_a = \sqrt{2 \times a^2}$$ $$D_b = \sqrt{2 \times b^2}$$ For the rectangle `B`, $$D_b$$ is not the diagonal: it is the length of the smallest edge cut with an angle of `45°`. ## Triangles Diagonal of the angle's triangle `C`: $$x = 2 \times a + b$$ From which you get the side of the triangle: $$y = \sqrt{\frac{x^2}{2}}$$ For the small triangle `D`, the hypotenuse is: $$z = D_a - D_b$$ ## Internal Length The internal length (not the total one) is: $$L = 2 \times y + 4 \times D_b + z$$ This is the length of a border `E` (and $$b$$ is the width). ## Converting Units If we want to move from our unit defined as the length of two main elements glued together to the total size of a pannel, this is easy. - The total length in our unit is $$L + 2 \times b$$ - The "true" total length is $$L_0$$ To convert all the previous numbers into the target unit, we just need to compute: $$w' = w \times \frac{L_0}{L + 2 \times b}$$ where $$w$$ is the length to convert and $$w'$$ the resulting value. # How to Generate that ? Well, you need to find the coordinate of `B` rectangles. Next, the simplest is to perform translation (horizontal and vertical) of $$D_a + D_b$$. There are rectangles that are cut at `45°`. To avoid finding the coordinates, the simplest thing to do (from a computer science perspective) is to add above these `B` rectangles the borders `E`. So they hide the edges.