Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Программирование в широком смысле слова > Математика

Математика Методы математического моделлирования, программирование математических концепций, роль математики в создании игр

Ответ
 
Опции темы
Старый 16.02.2011, 10:46   #1
IgorOK
Мастер
 
Аватар для IgorOK
 
Регистрация: 26.10.2009
Сообщений: 1,176
Написано 602 полезных сообщений
(для 2,170 пользователей)
Рассчёт траектории движения с поворотом.

Возник вопрос:

Есть объект который движется с одинаковой по модулю скоростью V и поворачивает на определённый угол A. Как найти траекторию движения этого объекта? По идее это должна быть окружность, но что-то я не пойму как эту формулу вывести.

UPD: Вообще желателен пример с изменяемыми V и A.
__________________

Последний раз редактировалось IgorOK, 16.02.2011 в 12:15.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Amatsu (16.02.2011)
Старый 16.02.2011, 11:33   #2
Amatsu
Дэвелопер
 
Аватар для Amatsu
 
Регистрация: 24.07.2008
Сообщений: 1,544
Написано 1,095 полезных сообщений
(для 2,704 пользователей)
Ответ: Рассчёт траектории движения с поворотом.

Кстати как раз вчера задался вопросом реализовать подобное. Потому интересен ответ, может не придется поднимать учебники по математике.
(Offline)
 
Ответить с цитированием
Старый 16.02.2011, 11:35   #3
IgorOK
Мастер
 
Аватар для IgorOK
 
Регистрация: 26.10.2009
Сообщений: 1,176
Написано 602 полезных сообщений
(для 2,170 пользователей)
Ответ: Рассчёт траектории движения с поворотом.

Например как рассчитать позицию для примера:

Graphics3D 1024, 768, 32, 2
SetBuffer BackBuffer()

Camera=CreateCamera()
PositionEntity Camera, 0, 20, 0
TurnEntity Camera, 90, 0, 0

Local Entity=CreateCube()
ScaleEntity Entity, .1, .1, 1

Local V#=.1 A#=1

While Not KeyHit(1)
MoveEntity Entity, 0, 0, V
TurnEntity Entity, 0, A, 0
UpdateWorld
RenderWorld
Flip
Wend
End
__________________
(Offline)
 
Ответить с цитированием
Старый 16.02.2011, 11:36   #4
IgorOK
Мастер
 
Аватар для IgorOK
 
Регистрация: 26.10.2009
Сообщений: 1,176
Написано 602 полезных сообщений
(для 2,170 пользователей)
Ответ: Рассчёт траектории движения с поворотом.

Сообщение от Amatsu Посмотреть сообщение
Кстати как раз вчера задался вопросом реализовать подобное. Потому интересен ответ, может не придется поднимать учебники по математике.
Да я вот сейчас сам за математикой сижу))
__________________
(Offline)
 
Ответить с цитированием
Старый 16.02.2011, 20:49   #5
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,505
Написано 2,960 полезных сообщений
(для 5,247 пользователей)
Ответ: Рассчёт траектории движения с поворотом.

Было бы проще, если бы код был привязан ко времени. Потому что можно было бы посчитать за сколько времени точка повернется на 360 градусов. Потом исходя из этого времени рассчитать длину окружности, описываемою точкой (т.к. постоянны скорость движения и скорость поворота я думаю это будет окружность). Далее можно было бы посчитать диаметр/радиус окружности. По известному радиусу и направлению движения в начальный момент времени можно попробовать найти центр окружности и составить формулы движения по каждой координате в зависимости от параметра времени (тут проблема - определить какой из двух центров окружностей правильный).

А вообще бы посоветовал не париться, а использовать sin и cos с нужным периодом и амплитудой + смещение в качестве центра окружности

типа
x = A*cos(P*t + p0) + centerX;
y = centerY;
z = A*sin(P*t + p0) + centerZ;
A и P - константы, t - параметр

A - радиус окружности
P = 2*pi/(количество секунд в периоде)
t - время в секундах, прошедшее со старта игры

p0 - сдвиг по фазе т.е. начальная точка на траектории - от 0 до 2*pi
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Amatsu (16.02.2011)
Старый 16.02.2011, 21:09   #6
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,505
Написано 2,960 полезных сообщений
(для 5,247 пользователей)
Ответ: Рассчёт траектории движения с поворотом.

Кстати вот вам еще один способ, который не потребует никаких формул выдумывать (правда если вы имеете что-то типа Blitz'а и т.п.)

1. Создаете экземпляр модели в пространстве.
2. Создаете пивот.
3. Делаете пивот парентом для модели.
4. Смещаете модель в локальных координатах пивота на величину радиуса вращения.
5. Вращаете пивот по оси Y на rotationSpeed * t / 360.
6. Модель вращается по окружности.
(Offline)
 
Ответить с цитированием
Старый 16.02.2011, 21:32   #7
IgorOK
Мастер
 
Аватар для IgorOK
 
Регистрация: 26.10.2009
Сообщений: 1,176
Написано 602 полезных сообщений
(для 2,170 пользователей)
Плохо Ответ: Рассчёт траектории движения с поворотом.

Спасибо, но это немного не то.

Сообщение от pax Посмотреть сообщение
Было бы проще, если бы код был привязан ко времени.
Вот мне как раз и нужно привязать ко времени.

Т.е. угол поворота объекта изменяется так:

a=a0+W*t
Проекции скорости вот так:

x=x0+cos(a0+W*t)*v
y=y0+sin(a0+W*t)*v
А вот как найти позицию объекта в момент времени Т?
__________________
(Offline)
 
Ответить с цитированием
Старый 17.02.2011, 12:00   #8
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,505
Написано 2,960 полезных сообщений
(для 5,247 пользователей)
Ответ: Рассчёт траектории движения с поворотом.

Сообщение от IgorOK Посмотреть сообщение
x=x0+cos(a0+W*t)*v
y=y0+sin(a0+W*t)*v
А я что написал? Или оффтоп проигнорировали?

Сообщение от IgorOK Посмотреть сообщение
А вот как найти позицию объекта в момент времени Т?
так подставь время в свои формулы и получишь положение.
(Offline)
 
Ответить с цитированием
Старый 17.02.2011, 12:38   #9
IgorOK
Мастер
 
Аватар для IgorOK
 
Регистрация: 26.10.2009
Сообщений: 1,176
Написано 602 полезных сообщений
(для 2,170 пользователей)
Ответ: Рассчёт траектории движения с поворотом.

Сообщение от pax Посмотреть сообщение
А я что написал? Или оффтоп проигнорировали?
так подставь время в свои формулы и получишь положение.
Вопрос был несколько сложнее. Нужно чтобы можно было установить объект в эти координаты. Тоесть нужна формула что-то вроде этой:

x=x0+v*t+(a*t^2)/2

Только для объекта который поворачивается, по мере движения. Тоесть изменяется ещё и направление скорости.
__________________
(Offline)
 
Ответить с цитированием
Старый 17.02.2011, 16:23   #10
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,505
Написано 2,960 полезных сообщений
(для 5,247 пользователей)
Ответ: Рассчёт траектории движения с поворотом.

По исходным данным - движение равномерное, следовательно траектория - окружность. Так же как я написал - необходимо найти центр окружности, начальную фазу и радиус и подставить в формулу.
(Offline)
 
Ответить с цитированием
Старый 17.02.2011, 16:30   #11
Morganolla
Бывалый
 
Аватар для Morganolla
 
Регистрация: 02.12.2008
Адрес: наша раша
Сообщений: 762
Написано 129 полезных сообщений
(для 245 пользователей)
Ответ: Рассчёт траектории движения с поворотом.

Все зависит от того на какой угол повернуть руль (баранку).
__________________
Reality Simulation Games
Core 2 Duo 2,8GHz, RAM 1Gb, ATI R5670 1Gb. WinXP 32
(Offline)
 
Ответить с цитированием
Старый 17.02.2011, 16:58   #12
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,505
Написано 2,960 полезных сообщений
(для 5,247 пользователей)
Ответ: Рассчёт траектории движения с поворотом.

Сколько еще нужно идей? ) Следующая: найдите формулу линии, перпендикулярной скорости движения в начальном положении и на следующем шаге - далее пересечение линий даст центр окружности, относительно него пляшите.
(Offline)
 
Ответить с цитированием
Старый 17.02.2011, 17:16   #13
IgorOK
Мастер
 
Аватар для IgorOK
 
Регистрация: 26.10.2009
Сообщений: 1,176
Написано 602 полезных сообщений
(для 2,170 пользователей)
Ответ: Рассчёт траектории движения с поворотом.

Ладно. Тема закрыта. Решение проблемы не найдено, но найден обходной путь решения.
__________________
(Offline)
 
Ответить с цитированием
Старый 18.02.2011, 07:49   #14
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 03.09.2005
Сообщений: 14,014
Написано 6,795 полезных сообщений
(для 20,920 пользователей)
Ответ: Рассчёт траектории движения с поворотом.

Решение проблемы не найдено, но найден обходной путь решения.
Пау40г в яростэ! == [[

Нажмите на изображение для увеличения
Название: паучог.jpg
Просмотров: 497
Размер:	15.7 Кб
ID:	12699

Graphics 800,600,32
SetBuffer BackBuffer()

Local x0#=GraphicsWidth()/2
Local y0#=GraphicsHeight()/2
Local a0#=90
Local b#=1
Local v#=8

For t#=0 To 1000 Step 3
	Local x#=x0-v*Sin(a0+b*t)*b
	Local y#=y0-v*Cos(a0+b*t)*b
	Plot x,GraphicsHeight()-y
	Delay 1
	Flip
Next
SetFont LoadFont("Arial",20)
Text 5,5,"betta="+b
Text 5,20,"v="+v
Flip
AppTitle "ok"

WaitKey()

End
Всегда получается окружность. Угол поворота и скорость влияют на её радиус и на то, как быстро окружность замкнётся.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
IgorOK (18.02.2011)
Старый 18.02.2011, 11:17   #15
IgorOK
Мастер
 
Аватар для IgorOK
 
Регистрация: 26.10.2009
Сообщений: 1,176
Написано 602 полезных сообщений
(для 2,170 пользователей)
Ответ: Рассчёт траектории движения с поворотом.

Наверное опять неправильно задал вопрос. Точка движется по траектории как в примере.

Graphics 1024, 768, 32, 2
SetBuffer BackBuffer()

Local x0#=400
Local y0#=400

Local x#=x0
Local y#=y0

Local w=1
Local v=1

Local m#=1.01


;#1
For t=1 To 180 Step 2
	x=x+Cos(w*t)*v
	y=y+Sin(w*t)*v
	Plot x, y
Next
Каждый раз к старой координате добавляется cos(w*t)*v и sin(w*t)*v.

Было бы неплохо узнать аналогичные формулы для двух следующих примеров.

Graphics 1024, 768, 32, 2
SetBuffer BackBuffer()

Local x0#=400
Local y0#=400

Local x#=x0
Local y#=y0

Local w=1
Local v=1

Local m#=1.01

;#2

For t=1 To 180 Step 2
	x=x+Cos(w*t)*(v*m^t)
	y=y+Sin(w*t)*(v*m^t)
	Plot x, y
Next
Graphics 1024, 768, 32, 2
SetBuffer BackBuffer()

Local x0#=400
Local y0#=400

Local x#=x0
Local y#=y0

Local w=1
Local v=1

Local m#=1.01
Local m2#=1.03

;#3

For t=1 To 180 Step 2
	x=x+Cos(w*m2^t)*(v*m^t)
	y=y+Sin(w*m2^t)*(v*m^t)
	Plot x, y
Next
Или хотябы узнать какой раздел матана для этого нужен.
__________________
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +1, время: 18:34.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com