![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#31 | |
Сама себе режиссер
Старожил
Регистрация: 27.04.2007
Сообщений: 3,365
|
![]() Цитата:
треугольник.png Хочу узнать координаты точки В. Что есть L для ее? Я правильно понимаю, L - это нужное расстояние? Т.е. в данном случае L = стороне а? А в случае моего шара L = 10? Я уже говорила, почему я не хочу привязываться ко времени.
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
|
|
![]() |
![]() |
![]() |
#32 | ||
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,242
|
![]()
1.
Цитата:
Еще учтите, что после отражения шар опять может напороться на стену. Тут или мой алгоритм, или рекурсия на каждой итерации, пока не перебрали все возможные отражения. Но мой вариант, кажется, проще. А в системе с несколькими шарами, после любого столкновения однозначно всё пересчитывать придётся. Вот я и предлагаю вам такой алгоритм. 1. Считаем время до следующего столкновения T 2. Спокойно рисуем все передвижения N = T mod dt раз (Если надо, рисуем последний момент (столкновение) через T - (dt * N)) 3. Считаем время до след... 4. ... 2. Цитата:
3. Зачем используете угол и путь? ИМХО - смещения dX и dY куда приятнее в подобных вычислениях. 4. Вот, для наглядности. Может поможет. Бильярд.jpg Последний раз редактировалось Sibedir; 29.03.2013 в 14:31. |
||
![]() |
![]() |
![]() |
#33 | |
Сама себе режиссер
Старожил
Регистрация: 27.04.2007
Сообщений: 3,365
|
![]()
Ваш алгоритм использует расстояние от точки до точки. Ну только так можно узнать время. Потому что проблематично узнать время, не зная точки назначения. Я правильно рассуждаю? У меня в закрытом прямоугольном пространстве движутся, скажем, сто шариков с учетом сопротивления пространства. Возьмем один из шариков. у него координата (10,10), в точке (40, 40) он будет через 5 секунд. Задан интервал в одну секунду. Запускаю интервал на каждую секунду, т.е. в каждую секунду происходит вызов функции foo, в которой отрисовывается шарик в новых координатах. Далее появляется еще один шарик, который должен столкнуться с нашим через 4 секунды и еще один через 3. Как я понимаю, мы просматриваем все препятствия и выбираем самое ближайшее к нашему шарику по расстоянию. И снова запускаем цикл на отрисовку, только уже относительно другой конечной точки, а именно столкновения с другим шариком. Но так как шариков много, то нам все равно нужен будет какой-то цикл, который будет каждый момент (кстати, какой именно момент? 1мс, 10мс или сколько?) будет проверять: а не появилось ли какое-то препятствие на пути нашего шарика. Появилось - пересчитываем снова время до препятствия и снова запускаем новый таймер. А вдруг тот шарик будет "проглочен" или откинут другим шариком? Так что в вашем алгоритме тоже присутствует рекурсия или что-то вроде того.
В моем алгоритме есть только один таймер - общий, в котором проверяется всего только следующий шаг. Даже если в моем алгоритме будет рекурсия (еще не делала, только для одного шара пытаюсь), то там не будет пересчета тысячи действий. Цитата:
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
|
|
![]() |
![]() |
![]() |
#34 | ||
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,242
|
![]() Цитата:
![]() ACE Valery, давайте так. Нарисуйте как один шарик катается по прямоугольному столу с бортами. Учитываем силу трения (const). Соударения абсолютно упругие. Дальше будем усложнять. Цитата:
|
||
![]() |
![]() |
![]() |
#35 | |||
Сама себе режиссер
Старожил
Регистрация: 27.04.2007
Сообщений: 3,365
|
![]() Цитата:
![]() ![]() Цитата:
![]() Цитата:
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
Последний раз редактировалось ACE Valery; 29.03.2013 в 15:32. |
|||
![]() |
![]() |
![]() |
#36 | ||
Старожил
Регистрация: 08.02.2012
Сообщений: 2,173
|
![]() Цитата:
Y1 = Y0 + L*Sin(Alfa) Но верно только если другая сторона треугольника (относительно данного угла) параллельна оси координат. Иначе нужно делать повороты или же усложнять формулу. Т.е. если угол наклона прямой равен Beta, то: X1 = X0 + L*Cos(Alfa - Beta) Y1 = Y0 + L*Sin(Alfa - Beta) т.е. вполне можно воспользоваться формулами разностей синуса и косинуса тригонометрии. синусы и косинусы углов наклона прямой тоже несложно вычислить, если известны две ее точки: sin(Beta) = dy/ sqrt(dx*dx + dy*dy) cos(Beta) = dx/ sqrt(dx*dx + dy*dy) Цитата:
пусть коробка с размерами 300 * 500 точек, а шар с радиусом 10 точек, тогда проверку можно проводить на соответствие центра шара координатам: x < 10 или x > 290 тогда dx = -dx (изменяем направление движения) x < 10 тогда x = 2*10 - x x > 290 тогда x = 2*290 - x y < 10 или y > 490 тогда dy = -dy ( изменяем направление движения) y < 10 тогда y = 2*10 - y y > 490 тогда y = 2*490 - y
Правильно поставленная задача - три четверти решения.
Последний раз редактировалось DiemonStar; 29.03.2013 в 16:09. |
||
![]() |
![]() |
![]() |
#37 | |||
Сама себе режиссер
Старожил
Регистрация: 27.04.2007
Сообщений: 3,365
|
![]()
Ребят, повторюсь: у меня нет проблем с чтением учебников, у меня проблемы с пониманием формул в таком виде.
Цитата:
треугольник2.png Т.е., если у вершины А координаты (7, 5), угол альфа = 30, угол бета = 60, то формула имеет вид: Код:
Цитата:
Цитата:
![]()
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
|
|||
![]() |
![]() |
![]() |
#38 | |
Старожил
Регистрация: 08.02.2012
Сообщений: 2,173
|
![]() Цитата:
Правильно поставленная задача - три четверти решения.
|
|
![]() |
![]() |
![]() |
#39 |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
![]()
Есть ещё один угол (у Вас на картинке равный нулю) - угол между горизонталью и прямой (AC). Если этот угол равен ф и отсчитывается по часовой стрелке (т.е. положительный угол ф означает, что C "выше" A), то
x1 = x0 + |AB|*cos(а-ф); в нашем случае x1 = 7 + 5*cos(а-0) = 7+4 = 11. y1 = y0 + |AB|*sin(a-ф); в нашем случае y1 = 4 + 5*sin(a-0) = 4+3 = 7. |
![]() |
![]() |
![]() |
#40 |
Сама себе режиссер
Старожил
Регистрация: 27.04.2007
Сообщений: 3,365
|
![]()
Abstraction, а вот этот угол я как раз не знаю.
DiemonStar, прямая задана двумя точками. А между этими точками есть еще одна точка, расстояние от которой до стены будет равно 10. Исходя из этих данных я могу найти эту точку?
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
векторная алгебра | KIRILOW | Помощь студентам | 61 | 31.10.2012 15:45 |
LNK1561 (векторная программа) | finz | Помощь студентам | 6 | 20.05.2011 18:01 |
Векторная графика | AnReykfi | Помощь студентам | 0 | 15.05.2010 14:10 |
векторная графика. квадрат | varelik | Мультимедиа в Delphi | 18 | 07.09.2009 22:25 |
Векторная графика в C++ Builder 6 | Max2114 | C++ Builder | 3 | 19.01.2009 14:56 |