Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Секреты разработки игр в Macromedia Flash MX - Макар Дж.

Макар Дж. Секреты разработки игр в Macromedia Flash MX — М.: КУДИЦ-ОБРАЗ , 2004. — 608 c.
ISBN 0-201-77021-0
Скачать (прямая ссылка): sekretirazrabotkiigr2004.djvu
Предыдущая << 1 .. 33 34 35 36 37 38 < 39 > 40 41 42 43 44 45 .. 210 >> Следующая

просто подставляем это значение х назад в любое из двух уравнений лини (я
выбрал первое):
у =ml*x+bl
Откройте файл Iinesintersecting.fla из папки Chapter05 на CD, чтобы п
смотреть это в действии. Этот файл использует те же функции, что м
применяли в предыдущем примере. Также, поскольку мы теперь имее дело с
двумя линиями, мы создали второй объект line. Имеющий в сцене экземпляр
клипа под названием dot, обозначающий точку, пос. вычисления будет
перемещен в точку пересечения. Ниже приведе функция, которая вычисляет
пересечение.
1 function findlntersect ion (1ine_a, line_b) {
2 var x = (1ine_b.b-1ine_a.b)/(1ine_a.m-1ine_b.m);
3 var у - line_a.m*x+line_a.b;
4 dot._x = x;
5 dot._y = у;
6 j
Функция принимает два параметра, line_а и line_b, которые ссылаются на
объ"
ты line. Затем она использует уравнение, выведенное выше, для поиска
коорд наты х пересечения. Как только координата х найдена, она
подставляе1
в уравнение для линии, представленное объектом line_а для нахождения коо
динаты у. После этого клип с изображением точки размещается в соответх
вующем месте сцены по этим двум значениям. Когда вы протестируете филь вы
увидите, что точка появляется над пересечением двух линий.
Определение пересечения отрезков двух линий
Это просто расширение того, что мы уже реализовали в этом разделе.
Методик которую мы только что рассмотрели, позволяет нам определить,
пересекаюГ ли две линии. Для того чтобы сделать это, мы находим
координаты пересечен между этими линиями, как если бы они не являлись
отрезками, и затем про вег ем, попадает ли эта точка в границы каждого
отрезка. Вовсе не очевидно, где1 это могло быть полезным. Без долгих
раздумий я могу придумать лишь о; общее, но очень важное применение. Оно
возникает при обнаружении неза! симого от кадров столкновения между
окружностью и линией. Этот случай сматрпвается подробно в следующем
разделе.
лава 5. Обнаружение столкновений
119

Линии пересекаются, но отрезки не пересекаются; следовательно,
столкновения нет
Линии пересекаются, так же как и отрезки; следовательно, столкновение
произошло
i
Откройте файл line_segments_intersecting.fla в папке Chapter05. После
определения объектов, которые представляют линии в этом файле, мы
добавляем две переменные, xl и х2, которые ограничивают отрезок линии. Я
изменил функцию drawLineQ из аналогичной в предыдущем файле примера таким
образом, что она получает координаты границ xl и х2 каждой линии и
вычисляет на основании них координаты границ^ иу2. Ниже представлена
измененная функция drawLine().

-У'

120
Часть 2 Исследование ос
1 f unct ion drawLine(1ine) {
2 //Choos e an x
3 var x = 1 i n e . x 1;
4 / /Find the у
5 var у = findY(line,
6 line.yl = y;
7 //Move the pen
8 clip.raoveTo(x, у) ;
9 //Choos e another x
10 var x = line.x2;
11 //Find the у
12 vaг у = findY(line,
13 1ine.y2 = y;
14 //Draw line
15 cl ip . 1i n e T о (x, у) ;
16 1
х) ;
х) ;
В этой функции мы перемещаем перо к одной границе и затем рисуем лин до
другой границы. Результатом является визуальное представление отрезка лин
После того как функция вызвана, объект line содержит координаты ли у для
об границ отрезка линии. Перед вызовом этой функции, объект line содержит
ли координаты границ xl и х2. Координаты границ yl и у2 вычисляются в
этой ф ции в строках 5 и 12 и затем сохраняются в объекте line в строках
6 и 13.
Функция find Intersection () также имеет важное дополнение для наших *
кущих задач - она теперь проверяет, находится ли точка пересечения в п
делах отрезков обеих линий. Эта функция приведена ниже.
1 function findin tersection(1ine_a, line_b) {
2 var x = (1ine_b.b-1ine_a.b)/(1ine_a.m-1ine
3 var у = line_a.m*x+line_a.b;
4 dot._x = x;
5 dot._y = y;
6 if ((x>=1ine_a.xl && x<=1ine_a.x2)
I (x<=line_a.xl &s x>=line_a.x2)
I (y>=line_a.у1 ss y<=line_a.y2)
I ( y<=line_a.yl SS y> = line_a.y2)) {
var segment_a = true;
f ( (x> = line_b.xl && x<=line_b.x2)
I (x<=line_b.xl ss x>=lineb.x2}
I (y>=line_b.yl && у<=1ine_b.y2)
I (y<=line_b.у1 ss y>=line_b.у2)) {
10 var segment_b = true;
b. m)
ва 5. Обнаружение столкновений
121
11 }
12 if (segment_a && segment_b) (
13 trace! "The lines are intersecting!!");
14 1
15 }
IcpEhie 5 строк этой функции иде!ггичны функции findlntersection() в
предыдущем шмере. В остальной части функции находится блок условия,
который проверяет, | содится ли точка пересечения в границах отрезков.
Строки 6-8 проверяют, наудится ли точка между границами х или между
границами у линии line_a. Бели , то точка остается на отрезке. Строки 9-
11 делают то же самое, что и 6-8,
i для линии line__b. Если точка остается в пределах границ обоих
отрезков,
выполняется оператор trace, давая вам знать, что пересечение произошло.
Вы могли бы ожидать увидеть раздел обнаружения столкновения точки с
линией раньше раздела обнаружения столкновения окружности с линией. Я не
включал эту методику по двум причинам. Во-первых, по моему опыту,
Предыдущая << 1 .. 33 34 35 36 37 38 < 39 > 40 41 42 43 44 45 .. 210 >> Следующая