![]() |
Пытаюсь разобраться с векторами, но есть вопросы
Понимаю, что название темы не особо раскрывает сути вопроса, но подругому никак, прошу не закрывать =)
В общем, с математикой в школе у меня было сложно (не повезло с учителями), а сейчас нужно разобраться с некоторыми вопросами. С тригонометрическими функциями разобрался давно, и достаточно быстро, но векторы до сих пор оставляют много вопросов, не смотря на то, что перечитал уже кучу инфы. Нашел такую статью про SAT. В принципе, описание понятно, но реализция этого в коде, не совсем. http://noregret.org/tutor/n/collision/#1.1 Для прояснения ситуации скачал Vector2D класс от рокетмэна. А теперь к делу. Вопрос №1: Как я понимаю, если создать экземпляр класса Vector2D и задать х и у координаты, то вектор в любом случае будет начинаться в координатах 0, 0, а х и у здесь будет точка, куда направлен вектор. Не могу понять, почему вектору задается только одна точка? Его начало должно находиться в координатах 0, 0 всегда? |
Вопрос 1. Да вы все верно говорите. Его начало вроде всегда из 0, 0 идет
|
Спасибо.
Тогда другой вопрос. В SAT (скажем, пример №9 по ссылке из первого поста), есть оси на которые проецируются фигуры. Как создать эту ось в коде? Если эта ось тоже вектор, то как она может, начинаясь в координатах 0, 0, перемещаться целиком? (надеюсь вопрос будет понятен :D ) |
goodguy а вообще хелп по флешу разве ничего не дает в эту сторону, насчет настроек вектора ?
|
Не более чем сайт рокетмэна. А по второму вопросу вообще ничего. + меня интересует не теория, а применения этого в коде. Теории я уже начитался не мало
|
О векторах очень хорошо, наглядно в картинках и примерах, рассказывается в хорошей книжке - AdvancED Game Design with Flash
правда на английском |
Цитата:
Откуда он начинается - дело сугубо личное. Просто принято, что вектор указывает направление из точки [0, 0]. Если смотреть на вектор с точки зрения реализации, то это, грубо говоря, обычная точка, у которой есть свойства x и y. |
Цитата:
Цитата:
п.с. Дело не конкретно в этом классе. Я встречал много его реализаций, и нигде нельзя было задать другую начальную точку. |
Цитата:
Вам зачем для вектора две точки? Обычно есть точка (отдельно) и есть вектор (отдельно). Вот с этими двумя величинами и оперируют, например прикладывают вектор к точке, получая тем самым сдвиг по направлению вектора. |
Ясно. Один вопрос отпал :D Спасибо ;)
|
Цитата:
|
Его пока нет, но, думаю скоро появится :D И не один
Я только начал изучать векторы http://www.flasher.ru/forum/image.ph...ine=1296634964 |
М-да...
Код AS3:
Длину надо кэшировать. Для того, чтобы можно было: Код AS3:
|
Цитата:
|
Хм... Ну, как сказать. Вместо трёх тригонометрических функций и двух умножений имеем два умножения и два деления.
|
Цитата:
Не знаю, если бы это были какие-то сложнейшие функции, то может и был бы смысл их заменять, а так... |
Ладно... Объясню по-другому.
Я проверял быстродействие разных элементарных математический операций. Результаты (10000000 итераций): (+): 819 (-): 748 (*): 775 (/): 856 (%): 1263 (cos): 3102 (atan2): 3807 Если честно, немного удивил результат для умножения и деления. До этого я получал другие показатели. Код проверки: Код AS3:
|
Раз пошла такая пьянка, то вот вам пища для размышления :)
Код AS3:
|
О!.. Кстати, давно хотел спросить - что вот это такое? $r_f01
|
не понял? обычная переменная вроде бы как..
|
(Через минуту)
Ясно. А чего с $ начинается? Это часть стиля? Добавлено через 3 минуты Кстати, по поводу статических переменных... Не знаю, может, я что-то не так делал, но я пробовал для набора родственных классов делать статические переменные, чтобы не творить их заново. К удивлению, я только потерял в быстродействии. |
ну типа статичный регистр. f01 - сокращение от float01, хотя по-сути тут числа double.., да неважно впрочем. Надо же как то выделить было :)
Добавлено через 6 минут фишка то не в названии, а в том, что при выносе промежуточной локальной переменной из функции в приватное поле класса, наблюдается прирост быстродействия. Я ни в коем случае не настаиваю использовать такие конструкции в ущерб функциональности. Просто коли уж зашел разговор о выдавливании последних капель производительности из кода, то вот, знайте, есть и такие вариации так сказать :) Добавлено через 13 минут хотя в данном примере можно было поступить еще проще: заюзать уже существующую локальную переменную Код AS3:
|
Не... Так я ж тоже так думал! Но проверил - и с удивлением, с грустью даже осознал, что таки нет. Не помогло! Могу показать функцию, в которой применял:
Код AS3:
Указанный кусок - начало функции поиска точки пересечения двух отрезков. Я сделал простую вещь. Проверил время выполнения для этой версии функции (10000 итераций), а потом - просто сделав копи-паст, запустил ту же функцию, но со статическими переменными, т. е., в коде класса Math2d сделал: Код AS3:
Не понимаю даже - почему. |
приватные нужно, приватные.
Я проверял где-то год назад это все - наблюдался небольшой прирост, иначе и не писал бы. И прирост собственно будет только в "маленьких" методах, который пару строчек. На котором хоть как-то сказывается инициализация локальной переменной. Если у вас потом идет тяжелый расчет, то толку абсолютно никакого не будет, скорее падение будет наблюдаться. |
Ну так, приватные... Без модификатора доступа они, как я понимаю, по-умолчанию приватные...
Ладно. Наверное, что-то где-то напутал, когда проверял скорость выполнения. Ещё раз исправлю - гляну, что выйдет. Отпишусь. А за идею использовать $ в начале названий переменных спасибо. Как раз недавно голову ломал по этому поводу. Забыл, что этот символ входит в набор разрешённых для начала имени переменной. Буду теперь юзать для служебных параметров классов. |
по-умолчанию internal
Добавлено через 2 минуты $ так-то еще у супер-методов принято ставить... |
В оригинальной конвенции $ предлагают ставить перед методами финалистами =)
@Автор: вектор — это направленный отрезок. При этом 2 вектора считаются одинаковыми если они совпадают параллельным переносом. То есть вектора (0,0; 10; 10) и (10; 10; 20; 20) совершенно одинаковые. А раз такая пьянка то смысла задавать первую точку нет @i.o., я вот не очень понял. Скорость сохранения в статичное поле класса в твоём примере быстрее, чем в локальную переменную или что? |
Кто нибудь тестировал на производительность этот Vector2 в сравнении с Point? Какой смысл его вообще использовать?
|
Да какая разница. Для меня его производительность вообще не имеет значения. И суть темы не в этом.
Цитата:
Об этом написано в википедии и еще на куче ресурсов. Для меня важна не теория, а применение на практике. В данном случае в коде на ActionScript 3. |
Цитата:
|
Цитата:
|
Цитата:
Автор - я в блоге тут на флэшере писал про вектора и САТ... |
Цитата:
Цитата:
|
Цитата:
|
alatar, в этом и дело, что в моем понятии (да и не только в моем) - Point - это точка. Ну может нулевой вектор можно представить как точку. Две точки на плоскости не дадут мне визуального представления об углах и пропорциях между ними... Но повторюсь - это идеологический момент - вектор показывает изменение, а точка - конкретное состояние.
Про Vector3D не понял вопрос... Это не я нормализовал - это стандартный метод класса Vector3D... |
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
В качестве точки чаще используется dot |
Цитата:
Например, судя по этой статье каждая составляющая звука — это пара громкость-высота. Вы хотите работать с кодом, где звук представлен совокпуностью... Point`ов? Пара вес-рост это тоже 2 значения. Сумма этих значений — это единицы для весовых категорий ряда единоборств. Я до абсурда могу довести быстро и просто. Если я работаю с вектором — я хочу в любой момент одним движением кисти узнать его угол наклон к OX, одним взмахом глаза нормализовать и одной силой мысли вывести его на экран для дебага. |
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
Цитата:
В целом я пасс заводить класс VectorPointExtenstion чтобы добавлять к существующему Point функционал. |
| Часовой пояс GMT +4, время: 16:09. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.