#include "fracture.h" int edge_to_verts(unsigned int width, bool periodic, unsigned int edge, bool index) { assert(edge < pow(width, 2)); int x = edge / width + 1; int y = edge % width + 1; if (periodic) { return (((index ^ (x % 2)) + 2 * ((y + (index ^ (!(x % 2)))) / 2) - 1) % width + (x - index) * width) / 2; } else { return ((index ^ (x % 2)) + 2 * ((y + (index ^ (!(x % 2)))) / 2) + (x - index) * (width + 1) - 1) / 2; } } int dual_edge_to_verts(unsigned int width, bool periodic, unsigned int edge, bool index) { assert(edge < pow(width, 2)); int x = edge / width + 1; int y = edge % width + 1; if (periodic) { return (((index ^ (!(x % 2))) + 2 * ((y + (index ^ (x % 2))) / 2) - 1) % width + (x - index) * width) / 2; } else { return ((index ^ (!(x % 2))) + 2 * ((y + (index ^ (x % 2))) / 2) + (x - index) * (width + 1) - 1) / 2; } } double dual_vert_to_coord(unsigned int width, bool periodic, unsigned int vert, bool index) { if (periodic) { if (index) return (2 * vert) % width + (2 * vert / width) % 2; else return 2 * vert / width; } else { if (index) return (2 * vert) % (width + 1); else return (2 * vert) / (width + 1); } }