Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Движение ракеты к точке, которая тоже движется (http://www.flasher.ru/forum/showthread.php?t=212840)

Charly84 13.05.2016 23:12

Движение ракеты к точке, которая тоже движется
 
Всем привет.

Возникла задача реализовать движение ракеты к точке, которая тоже движется.
Ракета не может резко менять направление движения, она движется по инерции.

Подскажите алгоритм просчета траектории.


Без инерции и прочей физики все просто. Высчитываем расстояние к точке и вектор движения и с определенной скоростью меняем координаты ракеты. А как сюда добавить физику?


Спасибо

undefined 13.05.2016 23:25

на каждом шаге добавляй к вектору скорости ракеты вектор, направленный к точке движения умноженный на коэффициент, пропорциональный массе ракеты

Charly84 14.05.2016 00:43

Цитата:

Сообщение от undefined (Сообщение 1194009)
на каждом шаге добавляй к вектору скорости ракеты вектор, направленный к точке движения умноженный на коэффициент, пропорциональный массе ракеты

Я реализовал вот так: к текущему вектору движения прибавляю предыдущий, умноженный на определенный коэффициент. Выходит достаточно реалистично.

undefined 14.05.2016 00:52

это прямолинейное равноускоренное движение.Где тут следование за целью?

Charly84 14.05.2016 01:51

Цитата:

Сообщение от undefined (Сообщение 1194011)
это прямолинейное равноускоренное движение.Где тут следование за целью?

Ну так каждый фрейм высчитывается новое направление к цели. И получается, что при попытке сменить курс, ракета получает инерцию от предыдущего направления полета.

Добавлено через 48 секунд
Если это не правильно, тогда подскажи, что такое вектор скорости и вектор, направленный к точке движения.

undefined 14.05.2016 02:48

Вложений: 1
типа того:
Код AS3:

import flash.display.*;
import flash.events.*;
import flash.geom.*;
stage.scaleMode=StageScaleMode.NO_SCALE;
var pos:Point=new Point(stage.stageWidth*0.5,stage.stageHeight*0.5);
var v:Point=new Point(0,0);
var m:Number=0.001;
rocket_mc.x=pos.x;
rocket_mc.y=pos.y;
addEventListener(Event.ENTER_FRAME,onEF);
function onEF(e:Event):void {
        var delta:Point=new Point(this.mouseX-pos.x,this.mouseY-pos.y);
        v.x+=delta.x*m;
        v.y+=delta.y*m;
        pos.x+=v.x;
        pos.y+=v.y;
        rocket_mc.x=pos.x;
        rocket_mc.y=pos.y;
        var angle:Number=Math.atan2(pos.y-mouseY,pos.x-mouseX)*180/Math.PI;
        rocket_mc.rotation=angle+180;
}

inertion.swf   (0.9 Кб)

Для большей реалистичности можно добавить трение

undefined 14.05.2016 02:52

v - вектор скорости
delta - вектор, направленный в сторону цели.

Charly84 15.05.2016 00:07

В примере ракета толком не долетает до мышки, особенно, если мышку двигать.

Но я уже реализовал задачу.
У мене есть вектор скорости, есть вектор движения к цели. Я складываю вектора. Вектор скорости зависит от массы ракеты. После просчетов результирующий вектор становится вектором скорости.

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


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

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.