четверг, 17 марта 2016 г.

Как крутить шарик в окружности

Андрей Совцов целых два поста запостил целых двух высококвалифицированных авторов про то, как кружок в кружке крутится. В первом посте Всеволод Леонов предлагает довольно сложную колебательную систему синусо-косинусоидальных прямоугольных координат( 1 ), а во втором сам Андрей задействовал движение по заданной траектории( 2 ). Любопытно, что самый простой вариант реализации так и не дан, а всё какие-то замудрости. Я считаю, что если начинать знакомство с темой, то с максимально простых примеров - Ex simplicibus ad composita!

1. Delphi, File | New | Multi-Device Application, Blank Application

2. Tool Palette, TCircle 2 раза, TPie 1 раз.

3. Structure, Pie1 кладём на Circle2, а Circle2 - на Circle1.

4. Object Inspector:
  Circle1 -  Align = Center,  Size.Width и Height = 350,
  Circle2 - Align = Left, размер оставим 50,
  Pie1 уменьшим на пару шагов, до 33 и поставим Align = Center.


5. Если кружок должен крутится, то что надо анимировать? Конечно, угол поворота!
Circle1.RotationAngle - Create New TFloatAnimation. В полученной анимации конечный угол StopValue = 360, зацикливаем Loop = True, включаем Enabled = True. Для Circle2 делаем всё то же самое, но учитывая вращение в обратную сторону добавим Inverse = True.

6. Немного математики. Маленький кружок, катаясь внутри большого, должен своей длиной окружности за время большого оборота покрыть длину большой окружности. Длина окружности прямо пропорциональна диаметру, а диаметры у нас - 50 и 350 - отличаются в 7 раз. Это значит, что пока кружок сделает полный круг, он должен обернуться вокруг себя 7 раз. Поэтому поставим продолжительность анимации большого круга object FloatAnimation1.Duration = 7 (секунд), а маленького FloatAnimation2.Duration = 1.

7. F9 - смотрим и думаем, как запустить процесс в другую сторону, как ускорить его или замедлить.

Всё. А вы что, господа педагоги, понапридумывали? Мне кажется, что простые решения - это именно то, что в инструменте привлекает начинающего разработчика в первую очередь. Нет?