Задать вопрос
Профиль пользователя заблокирован сроком «навсегда» без указания причины
Ответы пользователя по тегу JavaScript
  • Как проверить структуру JSON (не валидация)?

    @MikhailEdoshin
    Если вы уверены, что JSON пришел от правильного сервера, зачем его проверять?
    Ответ написан
  • Задание по программингу

    @MikhailEdoshin
    Как мне кажется, можно попробовать следующее. Когда три круга с радиусами a, b, c касаются, их радиусы образуют треугольник со сторонами a+b, b+c и с+a. (Радиусы касающихся кругов лежат на одной прямой, отсюда один шаг до треугольника.)

    Зная стороны треугольника, можем вычислить его углы. Вычислим для начала угол в центре a. Возьмем следующий круг d и приставим его к a и c. Образуется еще один треугольник из кругов a, c и d. Мы опять-таки можем вычислить его угол. Очевидно, мы можем таким образом укладывать круги вокруг a до тех пор, пока сумма внутренних углов не превысит 360 градусов.

    Unlimited Free Image and File Hosting at MediaFire
    После этого мы можем начать укладывать оставшиеся круги вокруг b. У него к этому времени уже будет занята часть круга — кругами a, c и, возможно, последним кругом, уложенным с другой стороны a.

    Зная стороны и углы мы знаем центр круга и, таким образом, его вертикальные и горизонтальные границы. В процессе укладки можно отслеживать максимальную границу, чтобы ненароком не выйти за размер прямоугольника.

    Возможно, в процессе работы будет имеет смысл добавлять воображаемые круги-заполнители.

    Это не полное решение (алгоритма, кроме перебора, я не предложу, кроме того, возможны варианты, когда в промежуток между тремя касающимися кругами можно всунуть еще маленький кружок, так что алгоритм, возможно, будет довольно сложным). Но начало, кажется, хорошее.
    Ответ написан
    3 комментария