forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Математика (http://forum.boolean.name/forumdisplay.php?f=85)
-   -   Рассчёт траектории движения с поворотом. (http://forum.boolean.name/showthread.php?t=14247)

IgorOK 16.02.2011 13:46

Рассчёт траектории движения с поворотом.
 
Возник вопрос:

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

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

Amatsu 16.02.2011 14:33

Ответ: Рассчёт траектории движения с поворотом.
 
Кстати как раз вчера задался вопросом реализовать подобное. Потому интересен ответ, может не придется поднимать учебники по математике.

IgorOK 16.02.2011 14:35

Ответ: Рассчёт траектории движения с поворотом.
 
Например как рассчитать позицию для примера:

Цитата:

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

IgorOK 16.02.2011 14:36

Ответ: Рассчёт траектории движения с поворотом.
 
Цитата:

Сообщение от Amatsu (Сообщение 179124)
Кстати как раз вчера задался вопросом реализовать подобное. Потому интересен ответ, может не придется поднимать учебники по математике.

Да я вот сейчас сам за математикой сижу))

pax 16.02.2011 23:49

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

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

типа
Код:

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

pax 17.02.2011 00:09

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

1. Создаете экземпляр модели в пространстве.
2. Создаете пивот.
3. Делаете пивот парентом для модели.
4. Смещаете модель в локальных координатах пивота на величину радиуса вращения.
5. Вращаете пивот по оси Y на rotationSpeed * t / 360.
6. Модель вращается по окружности.

IgorOK 17.02.2011 00:32

Ответ: Рассчёт траектории движения с поворотом.
 
Спасибо, но это немного не то.

Цитата:

Сообщение от pax (Сообщение 179206)
Было бы проще, если бы код был привязан ко времени.

Вот мне как раз и нужно привязать ко времени. :)

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

Код:

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

Код:

x=x0+cos(a0+W*t)*v
y=y0+sin(a0+W*t)*v

А вот как найти позицию объекта в момент времени Т?

pax 17.02.2011 15:00

Ответ: Рассчёт траектории движения с поворотом.
 
Цитата:

Сообщение от IgorOK (Сообщение 179209)
Код:

x=x0+cos(a0+W*t)*v
y=y0+sin(a0+W*t)*v


А я что написал? Или оффтоп проигнорировали?

Цитата:

Сообщение от IgorOK (Сообщение 179209)
А вот как найти позицию объекта в момент времени Т?

так подставь время в свои формулы и получишь положение.

IgorOK 17.02.2011 15:38

Ответ: Рассчёт траектории движения с поворотом.
 
Цитата:

Сообщение от pax (Сообщение 179241)
А я что написал? Или оффтоп проигнорировали?
так подставь время в свои формулы и получишь положение.

Вопрос был несколько сложнее. Нужно чтобы можно было установить объект в эти координаты. Тоесть нужна формула что-то вроде этой:

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

Только для объекта который поворачивается, по мере движения. Тоесть изменяется ещё и направление скорости.

pax 17.02.2011 19:23

Ответ: Рассчёт траектории движения с поворотом.
 
По исходным данным - движение равномерное, следовательно траектория - окружность. Так же как я написал - необходимо найти центр окружности, начальную фазу и радиус и подставить в формулу.

Morganolla 17.02.2011 19:30

Ответ: Рассчёт траектории движения с поворотом.
 
Все зависит от того на какой угол повернуть руль (баранку).

pax 17.02.2011 19:58

Ответ: Рассчёт траектории движения с поворотом.
 
Сколько еще нужно идей? ) Следующая: найдите формулу линии, перпендикулярной скорости движения в начальном положении и на следующем шаге - далее пересечение линий даст центр окружности, относительно него пляшите.

IgorOK 17.02.2011 20:16

Ответ: Рассчёт траектории движения с поворотом.
 
Ладно. Тема закрыта. Решение проблемы не найдено, но найден обходной путь решения.:-)

impersonalis 18.02.2011 10:49

Ответ: Рассчёт траектории движения с поворотом.
 
Вложений: 1
Цитата:

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

Вложение 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

Всегда получается окружность. Угол поворота и скорость влияют на её радиус и на то, как быстро окружность замкнётся.

IgorOK 18.02.2011 14:17

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

Код:

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

Или хотябы узнать какой раздел матана для этого нужен.:-D


Часовой пояс GMT +4, время: 16:57.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot