Опубликован: 07.11.2006 | Уровень: специалист | Доступ: платный
Лекция 9:

Математика и физика Flash

Аннотация: Прочитав эту лекцию можно освежить в памяти основные постулаты тригонометрии и физики, причём в контексте их применения для программирования во Flash. Автор приводит некоторые формулы, которые несомненно окажутся полезны начинающему разработчику.

Внимание! Для работы с этой лекцией необходимы учебные файлы, которые Вы можете загрузить здесь.

Перед тем, как работать с этой лекцией, вы можете загрузить chapter8-final.fla с сайта http://www.friendsofed.com/errata.html?isbn=1590591887.

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

Сначала скажу, что авторы данной книги не несут ответственности за материал по математике и физике. Мы будем рассматривать различные математические и физические принципы, и кое-что из того, с чем вы встретитесь, могло отсутствовать в учебниках по математике и физике, которыми вы когда-либо пользовались. Некоторые из концепций были упрощены для использования во Flash: убраны те части уравнений, с которыми мы не будем работать, а определения иногда звучат почти еретически. В некоторых случаях я значительно отклонился от реальности, дабы получить быстрый, простой и очевидный результат. Одним словом, если вы хотите изучать физику и математику в их стандартном представлении, лучше обратитесь к соответствующим учебникам. Если же вы хотите создавать впечатляющие эффекты с помощью математики и физики во Flash - читайте дальше:

Введение в тригонометрию

Нет, не убегайте из комнаты с дикими криками! Эта наука совсем не страшна. Шутки в сторону, это на самом деле один из наиболее важных предметов, который понадобится вам для изучения управления фильмами и фигурами, и, по большому счету, не представляет особой сложности. Многие люди говорят: "Я могу сделать многое с помощью ActionScript, однако в математике я не силен". Я всегда отвечаю таким людям: "Вам это и не нужно. Flash реализует за вас все математические вычисления". И это правда. Вам понадобится только умение мыслить логически и принимать решения, глядя на полученный промежуточный результат. Я изучал эти подходы и концепции по ходу дела и не вижу, почему бы вам не поступить так же.

Прежде всего, что же такое тригонометрия? Из самого названия можно сделать вывод, что это наука о треугольниках. Говоря более конкретно, в данной науке рассматриваются связи между углами и сторонами треугольника. Мы будем иметь дело только с прямоугольными треугольниками, т.е. с теми, один угол которых равен в точности 90 градусам.

У прямоугольного треугольника есть несколько очень полезных особенностей. Если вы сталкивались с теоремой Пифагора, то знаете, что квадрат гипотенузы равен сумме квадратов двух других сторон, т.е. катетов. Видите, вы уже кое в чем разбираетесь! Однако дальше - больше.

Теперь введем три небольших слова, которые вы будете использовать практически постоянно: sin, cos и tan. Каждое из них характеризует соотношение между двумя сторонамами треугольника. (Кстати, sin - сокращение от "синус", cos - от "косинус", а tan - от "тангенс".) Рассмотрим следующий рисунок.


Символ \theta - это греческая буква "тета", как правило, используемая для обозначения углов. Мы будем использовать ее для обозначения левого нижнего угла треугольника. x, y, и d обозначают длину сторон треугольника. С точки зрения q, y будет противолежащей стороной, x - прилежащей стороной, а d - гипотенузой.

Сначала рассмотрим sin.

Sin определяется как длина противолежащей стороны, деленная на гипотенузу. В нашем случае можно сказать, что sinq равен y/d. Например, если y равна 10 и d равна 30, то отношением будет 10/30, или 0,3333:

Каждый угол будет иметь свое собственное отношение противолежащей стороны к гипотенузе. Размер треугольника не имеет значения, только угол. Возьмем угол в 30°. Его отношение противолежащего катета к гипотенузе равно 0,5. Всегда. Поэтому мы говорим: sin 30° = 0,5. Следовательно, если y равно 10, а d равно 20, отношение даст в результате 0,5, и отсюда q равен 30°. Если вы знаете, что q равен 30°, а y равно 10, вы можете вычислить d, которое будет равно 20. Наконец, если вы знаете, что d равно 20, то y будет равно 10.

Другими словами, если вам известны хотя бы два атрибута, вы всегда можете вычислить третий, при этом необходимо просто знать отношения, которые формирует каждый угол. Самое интересное, что все это встроено во Flash! Все, что вам нужно, это написать Math.sin(angle) - и вы получите дробь для данного угла.

Теперь перейдем к косинусу. Cos - это отношение прилежащего катета к гипотенузе. Поэтому в нашем случае cos q = x/d.

Наконец, тангенс - это отношение противолежащего катета к прилежащему. В нашем треугольнике tan q = y/x.

Как же использовать эти строки во Flash? Они обычно используются для кругового движения фильма. Кругового? Мы ведь говорили о треугольниках: Что ж, посмотрите на следующий рисунок.


Нам нужно, чтобы movieClip1_mc двигался по круговой траектории, совершая полный оборот по часовой стрелке, начиная со своей текущей позиции. Здесь d - это радиус круга, и он всегда постоянен. Давайте предположим, что он равен 100, а углом будет q. Теперь, в каждый момент времени мы будем знать d и q, поэтому с помощью sin мы сможем найти y, а с помощью cos можно вычислить x. Формулы для этих вычислений следующие.

x = cos q * d
  y = sin q * d

Вооружившись этими значениями, мы можем найти параметры _x и _y нашего фильма. Я знаю, что вы уже хотите поскорее приступить к работе и опробовать изложенный здесь материал на движении объектов, но здесь существует еще один момент. Flash вычисляет все углы для использования в математических функциях в радианах, а не в градусах. Это просто еще один способ разделения круга на секторы. Я не буду долго рассказывать о радианах, скажу лишь, что один радиан равен примерно 57,29578 градусов. Интересно, правда? Для облегчения запоминания: круг образован углом в 360 градусов, что равно 2p радианам. Следовательно, один радиан - это p180 градусов. Это соотношение, которое мы будем использовать в большинстве случаев для преобразования радианов в углы. Запишите следующие формулы на вашей шпаргалке.

Градусы = радианы*180/Math.p

Радианы = градусы*Math.p/180

Ознакомившись с основной теорией, перейдем к работе непосредственно во Flash. Мы применим концепции тригонометрии в нашем ActionScript, чтобы обеспечить движение фильма по строго круговой траектории. Если вам нужен файл с примером, его имя - circular_motion.fla.

Игорь Хан
Игорь Хан

у меня аналогичная ситуация. Однако, если взять пример из приложения (ball_motion_04_click for trial.fla) то след остается. при этом заметил, что в моем проекте в поле "One item in library" виден кружок, в то время как в приложенном примере такого кружка нет.

Вопрос знатокам, что не так?

Александр Коргапольцев
Александр Коргапольцев

объект созданый мной упорно не желает оставлять след(единственное что добился, так это то что шарик резво гоняется за курсором) функция duplicateMovieClip остаётся не активной, т.е. следа от объекта не остаётся, но если я тоже самый код вбиваю в учебный файл всё работает, не могу понять где я ошибаюсь и почему в документе созданном заново, не работает код начиная от функции duplicateMovieClip? 

Тамара Ионова
Тамара Ионова
Россия, Нижний Новгород, НГПУ, 2009
Магомед Алисултанов
Магомед Алисултанов
Россия, Волгоград, лицей 2