Giter Site home page Giter Site logo

convex's Introduction

date author title
Е.А. Роганов и А.С. Баландин
Проект «Выпуклая оболочка»

Постановка задачи

Необходимо написать программу, находящую выпуклую оболочку последовательно поступающих точек плоскости и вычисляющую её периметр, площадь, а также периметр части выпуклой оболочки, расположенной внутри кольца. Решение должно быть индуктивным, что означает определение выпуклой оболочки и вычисление её характеристик сразу после поступления очередной точки с использованием методов теории индуктивных функций.

Идея решения

Для вычисления периметра части выпуклой оболочки, расположенной внутри кольца, находились те части каждого отрезка, которые лежат внутри большей и меньшей окружности кольца, из 1ой величины вычиталась 2ая. Для этого находились точки пересечения окружностей и прямой, на которой лежит отрезок.

Краткий комментарий к решению

  • Ключевое понятие проекта: освещённость ребра из точки
  • Вспомогательные классы:
    • R2Point — точка на плоскости
    • Deq — контейнер дек (double ended queue)
  • Основные классы:
    • Figure — «абстрактная» фигура
    • Void — нульугольник
    • Point — одноугольник
    • Segment — двуугольник
    • Polygon — многоугольник
  • Файлы проекта:
    • README.md — данный файл
    • README.html — полученный из файла README.md html-файл
    • r2point.py — реализация класса R2Point
    • deq.py — реализация класса Deq
    • convex.py — реализация основных классов
    • run_convex.py — файл запуска
    • tk_drawer.py — интерфейс к графической библиотеке
    • run_tk_convex.py — файл запуска с использованием графики
    • tests/test_r2point.py — тесты к классу R2Point
    • tests/test_convex.py — тесты к основным классам

Файлы run_tk_convex.py и run_tk_convex.py являются исполняемыми (они имеют бит x), в первой строке каждого из них используется шебанг и команда env с опцией (ключом) -S. Это обеспечивает передачу интерпретатору языка Python опции (ключа) -B, отменяющего генерацию pyc-файлов в директории __pycache__.

Соблюдение соглашений о стиле программного кода

Для языка Python существуют соглашения о стиле кода. Они являются лишь рекомендациями (интерпретатор игнорирует их нарушение), но основную их часть при написании программ целесообразно соблюдать. Существует простой способ проверить соблюдение считающегося правильным стиля записи кода с помощью утилиты (программы) pycodestyle. Утилита yapf позволяет даже изменить код в соответствии с этими соглашениями.

Команда

pycodestyle r2point.py

позволяет, например, проверить соблюдение стиля для файла r2point.py. С помощью очень мощной и часто используемой утилиты find проверить корректность стиля всех файлов проекта можно так:

find . -name '*.py' -exec pycodestyle {} \;

Эта команда находит все файлы с расширением py и запускает программу pycodestyle последовательно для каждого из них.

Запуск тестов

Уже известная нам команда (см. материал, посвящённый тестированию программ)

python -B -m pytest -p no:cacheprovider tests

запускает pytest, выполняя все начинающиеся с test методы классов, имена которых начинаются с Test, содержащиеся во всех файлах test_*.py директории tests.

Запуск программы

./run_convex.py

Запуск программы с графическим интерфейсом

./run_tk_convex.py

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.