Пример #1
0
    def create_tiles(self, depth: int):
        if depth == 0:
            self._draw(depth)
            return

        self.create_tiles(depth=depth - 1)

        print(f"Populating depth {depth}...")
        new_boundary = [
            self._build_new_tile(self._boundary[0], self._boundary[-1])
        ]
        index = 0

        counter = 0
        num_tiles = (3 * sqrt(3) * ((2 + sqrt(3))**depth -
                                    (2 - sqrt(3))**depth)).as_int()

        while True:
            new_vertex = self._build_new_tile(new_boundary[-1],
                                              self._boundary[index])
            counter += 1
            print(f"created {counter} / {num_tiles} tiles...", end="\r")

            if new_vertex in self._boundary:
                index += 1
            elif new_vertex in new_boundary:
                break
            else:
                new_boundary.append(new_vertex)

        self._boundary = new_boundary
        self._draw(depth)

        print(f"Populated, found {len(self._tiles)} tiles")
Пример #2
0
    def r_euclid(self) -> float:
        assert self.z != 0

        return (((self.x / self.z)**2 + (self.y / self.z)**2) * sqrt(2) -
                1).value**0.5
Пример #3
0
 def from_points(point_1: Point, point_2: Point) -> "Line":
     return Line(
         x=point_1.y * point_2.z - point_1.z * point_2.y,
         y=point_1.z * point_2.x - point_1.x * point_2.z,
         z=(point_1.y * point_2.x - point_1.x * point_2.y) * sqrt(2),
     )
Пример #4
0
 def product(self, point: Point) -> QuadraticRational:
     return self.z * point.z - (self.x * point.x +
                                self.y * point.y) * sqrt(2)
Пример #5
0
 def norm(self) -> QuadraticRational:
     return (self.x**2 + self.y**2) * sqrt(2) - self.z**2
Пример #6
0
def main():
    point_1 = Vertex(0 * sqrt(2) / 1,
                     sqrt(2) / sqrt(3), (sqrt(2) + 1) / sqrt(3))
    point_2 = Vertex(-sqrt(2) / 2, -1 / sqrt(6), (sqrt(2) + 1) / sqrt(3))
    point_3 = Vertex(sqrt(2) / 2, -1 / sqrt(6), (sqrt(2) + 1) / sqrt(3))

    tiling = Tiling(point_1, point_2, point_3)
    tiling.create_tiles(depth=6)
Пример #7
0
def cosh_distance(point_1: Point, point_2: Point) -> QuadraticRational:
    return point_1.z * point_2.z - (point_1.x * point_2.x +
                                    point_1.y * point_2.y) * sqrt(2)