Форум: "Игры";
Текущий архив: 2004.03.05;
Скачать: [xml.tar.bz2];
ВнизКак работать с векторами? Найти похожие ветки
← →
Norlin (2003-08-17 19:43) [0]Подскажите, плз, как работать с векторами в Дельфи?
← →
VitGun (2003-08-17 20:38) [1]type
TVector=record
x,y:real;
end;
function AddVector(Vector1, Vector2: TVector): TVector; //Сложение векторов
function SubVector(Vector1, Vector2: TVector): TVector;//вычитание векторов
function MultVector(Vector: TVector; Num: GLfloat): TVector;//умножение векторов
function NormalizeVector(Normal: TVector): TVector;//деление? векторов
function AddVector(Vector1, Vector2: TVector): TVector;
begin
Result.X := Vector1.X + Vector2.X;
Result.Y := Vector1.Y + Vector2.Y;
end;
function SubVector(Vector1, Vector2: TVector): TVector;
begin
Result.X := Vector1.X - Vector2.X;
Result.Y := Vector1.Y - Vector2.Y;
end;
function MultVector(Vector: TVector; Num: GLfloat): TVector;
begin
Result.X := Vector.X * Num;
Result.Y := Vector.Y * Num;
end;
function NormalizeVector(Normal: TVector): TVector;
var Magnitude: GLfloat;
begin
Result.X := Normal.X / Magnitude;
Result.Y := Normal.Y / Magnitude;
end;
← →
Micah'GF (2003-08-18 16:40) [2]ээээээээ.... интересная тема, но несовсем понятно для чего сложение, вычитаение, ... IMHO это не самое важное..
Появилась надобность смоделировать путь в двухмерном пространстве... вот начал работать с векторами. Путь представляю как массив координат точек, между которыми прокладываются вектора...
Теперь нужно смоделировать движение точки по этому пути... Может у кого уже есть готовые решения?!?!?!
← →
ооооооооооооооооооооо (2003-08-18 18:43) [3]что значит " прокладываются вектора"?? на уроках физики спали чтоль?
помни что координата обьекта через промежуток времени dt будет равна
в векторах одно, двух, трехмерных...
X(ч-з dt) = X(сейчас) + V(скорость сейчас)*dt
вот затем и сложение и умножение векотров на число!
если V изменяется со временем, то и для него пишем
V(ч-з dt) =V(сейчас) + A(ускорение сейчас)*dt
если и ускорение изменяется то тоже самое пишем и для него.
и все! никаких массивов!
← →
Micah'GF (2003-08-18 21:52) [4]эээээ... у меня не совсем хорошо с геометрией+физикой :]
можно поподробнее как в коде реализовать?!?!?
а массив точек у меня потому что путь должен быть ужасно кривой...
(мысль: надо бы какнить на картинке изобразить что хочу сделать) :]
← →
Дмитрий В. Белькевич (2003-08-19 01:42) [5]>прокладываются вектора...
>Теперь нужно смоделировать движение точки по этому пути... >Может у кого уже есть готовые решения?!?!?!
Тебе нужно посчитать все точки между векторами или что? Ну так ищи рассчет положения точек на линии. В чем проблема-то?
← →
ооо (2003-08-19 15:52) [6]если есть массив с готовыми координатами, то проблема в чем? просто на каждый тик таймера берешь следующую координату из массива.. но я бы так не делал..
← →
NailMan (2003-08-19 16:44) [7]Насколько я понял - у тебя есть набор вейпонтов, и тебе хоцца получить промежуточные значения в пространстве для более гладкого движения. Это можно сделать с помощью линейной интерполяции.
Вот эта функция из Direc3D
// Linear interpolation. V1 + s(V2-V1)
function D3DXVec3Lerp(out vOut : TD3DVector3; const v1, v2 : TD3DXVector; const s : Single) : TD3DXVector3;
begin
with vOut do
begin
x := v1.x + s * (v2.x - v1.x);
y := v1.y + s * (v2.y - v1.y);
z := v1.z + s * (v2.z - v1.z);
end;
Result:= vOut;
end;
← →
Micah'GF (2003-08-20 09:32) [8]2NailMan
s это скорость ?
Вообщето конечная цель даже сложнее.. вот картинка (не поленитесь посмотреть.. всего 8кб) http://200mb.org/coding/path.gif
Черным показан путь, который образован вейпоинтами - красные точки.
Большим красным кругом обозначена цель, серая линия - путь ее движения, который нужно смоделировать (как видишь он должен получиться плавнее). Точка показаная стрелкой должна перемещаться равномерно во времени, но с изменяемой скоростью..
← →
NailMan (2003-08-20 09:52) [9]To -> Micah"GF
Это шаг интерполяции. В принципе это можно понимать как dS или скорость учитывая что dS объект проходит за известное дискретное время.
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2004.03.05;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c