Esempio n. 1
0
 def test_g73_trian_lower(self):
     Figure.rectangle = Rectangle()  # Сразу создаем прямоугольник
     # Сначала делаем отрезок
     t = Segment(R2Point(-1.0, -1.0), R2Point(1.0, 1.0))
     # Соединяем с третьей точкой -> Получаем треугольник
     t = t.add(R2Point(1.0, -1.0))
     assert t.g73() == approx(2.0)
Esempio n. 2
0
 def test_g73_rect_x_lay_trian_up1(self):
     # Сразу создаем прямоугольник
     Figure.rectangle = Rectangle(R2Point(0.0, 0.0), R2Point(2.0, 1.0))
     t = Point(R2Point(0.0, 2.0))
     t = t.add(R2Point(2.0, 0.0))
     t = t.add(R2Point(2.0, 2.0))
     # Общая площадь должна быть 0.5 (четверть прямоугольника)
     assert t.g73() == approx(0.5)
Esempio n. 3
0
 def test_g73_rect_x_lay_trian_trian_throught_border_three(self):
     # Сразу создаем прямоугольник
     Figure.rectangle = Rectangle(R2Point(0.0, 0.0), R2Point(2.0, 1.0))
     t = Point(R2Point(1.0, 0.0))
     t = t.add(R2Point(1.0, 1.0))
     t = t.add(R2Point(3.0, 2.0))
     # Общая площадь должна быть 0.5
     assert t.g73() == approx(0.5)
Esempio n. 4
0
 def test_g73_the_same_square(self):
     Figure.rectangle = Rectangle()  # Сразу создаем прямоугольник
     # Сначала делаем отрезок
     t = Segment(R2Point(-1.0, -1.0), R2Point(1.0, -1.0))
     # Соединяем с третьей точкой -> Получаем треугольник
     t = t.add(R2Point(1.0, 1.0))
     # Соединяем с четвертой точкой -> Получаем квадрат (точки совпадают с вершинам "прямоугольника" по умолчанию)
     t = t.add(R2Point(-1.0, 1.0))
     assert t.g73() == approx(4.0)
Esempio n. 5
0
 def test_g73_trian_big_upper(self):
     Figure.rectangle = Rectangle()  # Сразу создаем прямоугольник
     # Сначала делаем отрезок
     t = Point(R2Point(-2.0, 2.0))
     t = t.add(R2Point(-2.0, -2.0))
     # Соединяем с третьей точкой -> Получаем большой треугольник
     t = t.add(R2Point(2.0, 2.0))
     # Общая площадь должна быть 2 (половина квадрата)
     assert t.g73() == approx(2.0)
Esempio n. 6
0
 def test_g73_small_square_in(self):
     Figure.rectangle = Rectangle()  # Сразу создаем прямоугольник
     # Сначала делаем отрезок
     t = Segment(R2Point(-0.5, -0.5), R2Point(0.5, -0.5))
     # Соединяем с третьей точкой -> Получаем треугольник
     t = t.add(R2Point(0.5, 0.5))
     # Соединяем с четвертой точкой -> Получаем маленький квадратик внутри нашего "прямоугольника"
     t = t.add(R2Point(-0.5, 0.5))
     # Общая площадь равна площади всей замкнутой оболочки, т.е. единицы (всего квадратика)
     assert t.g73() == approx(1.0)
Esempio n. 7
0
 def test_g73_line_up(self):
     Figure.rectangle = Rectangle()  # Сразу создаем прямоугольник
     # Сначала делаем отрезок
     t = Segment(R2Point(-1.0, 0.5), R2Point(1.0, 0.5))
     # Соединяем с третьей точкой -> Получаем треугольник
     t = t.add(R2Point(1.0, 1.0))
     # Соединяем с четвертой точкой -> Получаем полосочку вверху нашего квадрата
     t = t.add(R2Point(-1.0, 1.0))
     # Общая площадь равна площади полоски, т.е. тоже единица
     assert t.g73() == approx(1.0)
Esempio n. 8
0
 def test_g6(self):
     t = Segment(R2Point(-1.0, 0.0), R2Point(1.0, 0.0))
     t = t.add(R2Point(0.0, 1.0))
     t = t.add(R2Point(0.0, -1.0))
     t = t.add(R2Point(1.0, 1.0))
     t = t.add(R2Point(1.0, -1.0))
     t = t.add(R2Point(-1.0, 1.0))
     t = t.add(R2Point(-1.0, -1.0))
     t = t.add(R2Point(3.0, -1.0))
     t = t.add(R2Point(-1.0, 3.0))
     assert t.g() == approx(sqrt(2.0) + 2 * sqrt(10.0))
Esempio n. 9
0
 def test_g73_not_crossing(self):
     Figure.rectangle = Rectangle()  # Сразу создаем прямоугольник
     # Сначала делаем отрезок
     t = Point(R2Point(-1.0, 2.0))
     t = t.add(R2Point(1.0, 2.0))
     # Соединяем с третьей точкой -> Получаем треугольник
     t = t.add(R2Point(1.0, 3.0))
     # Соединяем с четвертой точкой -> Получаем полосочку ВЫШЕ нашего квадрата и не пересекающего его
     t = t.add(R2Point(-1.0, 3.0))
     # Общая площадь равна площади полоски, т.е. тоже единица
     assert t.g73() == 0.0
Esempio n. 10
0
 def setup_method(self):
     Figure.rectangle = Rectangle()  # Сразу создаем прямоугольник
     self.f = Polygon(
         R2Point(
             0.0, 0.0),
         R2Point(
             1.0, 0.0),
         R2Point(
             0.0, 1.0)
     )
     Figure.fixed_point = R2Point(0.0, 0.0)
Esempio n. 11
0
 def test_g73_x_elongated(self):
     Figure.rectangle = Rectangle()  # Сразу создаем прямоугольник
     # Сначала делаем отрезок
     t = Point(R2Point(-2.0, -1.0))
     t = t.add(R2Point(2.0, -1.0))
     # Соединяем с третьей точкой -> Получаем треугольник
     t = t.add(R2Point(2.0, 1.0))
     # Соединяем с четвертой точкой -> Получаем вытянутый прямоугольник
     t = t.add(R2Point(-2.0, 1.0))
     # Но общая-то площадь измениться всё-равно не должна
     assert t.g73() == approx(4.0)
Esempio n. 12
0
 def test_g73_rect_x_lay_same_line2(self):
     # Сразу создаем прямоугольник
     Figure.rectangle = Rectangle(R2Point(-1.0, 0.0), R2Point(2.0, 1.0))
     t = Point(R2Point(1.0, 1.0))
     t = t.add(R2Point(2.0, 2.0))
     t = t.add(R2Point(0.0, 2.0))
     t = t.add(R2Point(2.0, 1.0))
     t = t.add(R2Point(0.0, 2.0))
     t = t.add(R2Point(0.0, 1.0))
     t = t.add(R2Point(-1.0, 2.0))
     t = t.add(R2Point(-1.0, 1.0))
     # Общая площадь должна быть 0.0 (пересечения лишь по верхней границе)
     assert t.g73() == 0.0
Esempio n. 13
0
 def test_vertexes4(self):
     assert self.f.add(
         R2Point(
             0.4,
             1.0)).add(
         R2Point(
             1.0,
             0.4)).add(
         R2Point(
             0.8,
             0.9)).add(
         R2Point(
             0.9,
             0.8)).points.size() == 7
     assert self.f.add(R2Point(2.0, 2.0)).points.size() == 4
Esempio n. 14
0
    def test_g73_trian_upper(self):
        Figure.rectangle = Rectangle()  # Сразу создаем прямоугольник
        # Сначала делаем отрезок
        t = Polygon(
            R2Point(
                -1.0, -1.0),
            R2Point(
                1.0, 1.0),
            R2Point(
                -1.0, 1.0)
        )

        # t = Point(R2Point(-1.0, -1.0))
        # t = t.add(R2Point(1.0, 1.0))
        # t = t.add(R2Point(-1.0, 1.0))
        assert t.g73() == approx(2.0)
Esempio n. 15
0
 def test_g4(self):
     t = Segment(R2Point(-1.0, 0.0), R2Point(1.0, 0.0))
     t = t.add(R2Point(0.0, 1.0))
     t = t.add(R2Point(0.0, -1.0))
     t = t.add(R2Point(1.0, 1.0))
     t = t.add(R2Point(1.0, -1.0))
     t = t.add(R2Point(-1.0, 1.0))
     t = t.add(R2Point(-1.0, -1.0))
     assert t.g() == approx(4.0 * sqrt(2.0))
Esempio n. 16
0
class Figure:
    """ Абстрактная фигура """

    fixed_point = R2Point(0.0, 0.0)
    rectangle = Rectangle()

    def perimeter(self):
        return 0.0

    def area(self):
        return 0.0

    def g(self):
        return None

    def g73(self):
        """
        По умолчанию площадь пересечения равна нулю
        """
        return 0.0
Esempio n. 17
0
#!/usr/bin/env -S python3 -B
from r2point import R2Point
from convex import Figure, Void

print("Заданная точка")
Figure.fixed_point = R2Point()
print("\nТочки плоскости")

f = Void()
try:
    while True:
        f = f.add(R2Point())
        print(f"S = {f.area()}, P = {f.perimeter()}, g = {f.g()}")
        print()
except(EOFError, KeyboardInterrupt):
    print("\nStop")
Esempio n. 18
0
def add_pt(f, x=None, y=None):
    f = f.add(R2Point(x, y))
    print(f"S = {f.area()}, P = {f.perimeter()}, g73 = {f.g73()}\n")
    return f
Esempio n. 19
0
            # удаление освещённых рёбер из конца дека
            p = self.points.pop_last()
            while t.is_light(self.points.last(), p):
                self._g -= support.lenght(p, self.points.last())
                self._perimeter -= float(p.dist(self.points.last()))
                self._area += abs(R2Point.area(t, p, self.points.last()))
                p = self.points.pop_last()
            self.points.push_last(p)

            # добавление двух новых рёбер
            self._perimeter += float(
                t.dist(self.points.first()) + t.dist(self.points.last()))
            self._g += \
                support.lenght(t, self.
                               points.first()) + support.lenght(t, self.
                                                                points.last())
            self.points.push_first(t)

        return self


if __name__ == "__main__":
    f = Void()
    print(type(f), f.__dict__)
    f = f.add(R2Point(0.0, 0.0))
    print(type(f), f.__dict__)
    f = f.add(R2Point(1.0, 0.0))
    print(type(f), f.__dict__)
    f = f.add(R2Point(0.0, 1.0))
    print(type(f), f.__dict__)
Esempio n. 20
0
 def setup_method(self):
     self.f = Segment(R2Point(0.0, 0.0), R2Point(1.0, 0.0))
     Figure.fixed_point = R2Point(0.5, 0.0)
Esempio n. 21
0
#!/usr/bin/env -S python3 -B
from convex import Void
from r2point import R2Point

# print("Старое задание: Заданная точка")
# Figure.fixed_point = R2Point(0.0, 0.0)

print("Задание #73 (Сальдиков): Вершина #1 правильного прямоугольника")
#vertex1 = R2Point(0.0, 0.0)
vertex1 = R2Point()

print(
    "Задание #73 (Сальдиков): Вершина #2 (противоположная) правильного прямоугольника"
)
#vertex2 = R2Point(2.0, 1.0)
vertex2 = R2Point()


def add_pt(f, x=None, y=None):
    f = f.add(R2Point(x, y))
    print(f"S = {f.area()}, P = {f.perimeter()}, g73 = {f.g73()}\n")
    return f


print("\nТочки плоскости")
f = Void(vertex1, vertex2)
try:
    # f = add_pt(f, 1.0, 1.0)
    # f = add_pt(f, 2.0, 2.0)
    # f = add_pt(f, 0.0, 2.0)
    # f = add_pt(f, 2.0, 1.0)
Esempio n. 22
0
 def test_add1(self):
     assert self.f.add(R2Point(0.0, 0.0)) is self.f
Esempio n. 23
0
 def test_add2(self):
     assert isinstance(self.f.add(R2Point(1.0, 0.0)), Segment)
Esempio n. 24
0
 def test_vertexes3(self):
     assert self.f.add(R2Point(1.0, 1.0)).points.size() == 4
Esempio n. 25
0
 def test_vertexes2(self):
     assert self.f.add(R2Point(0.1, 0.1)).points.size() == 3
Esempio n. 26
0
 def test_perimeter2(self):
     assert self.f.add(R2Point(1.0, 1.0)).perimeter() == approx(4.0)
Esempio n. 27
0
 def test_area2(self):
     assert self.f.add(R2Point(1.0, 1.0)).area() == approx(1.0)
Esempio n. 28
0
 def test_g1(self):
     t = Segment(R2Point(-1.0, 0.0), R2Point(1.0, 0.0))
     t = t.add(R2Point(0.0, 1.0))
     assert t.g() == approx(3.0)
Esempio n. 29
0
 def test_g73_zero_segment(self):
     Figure.rectangle = Rectangle()  # Сразу создаем прямоугольник
     t = Point(R2Point(-1.0, -1.0))
     t = t.add(R2Point(1.0, 1.0))
     assert t.g73() == 0.0
Esempio n. 30
0
 def test_add(self):
     assert isinstance(self.f.add(R2Point(0.0, 0.0)), Point)