Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.05;
Скачать: CL | DM;

Вниз

Как работать с векторами?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.023 c
1-12333
Android
2004-02-22 20:28
2004.03.05
trichedit


3-12292
denis24
2004-02-06 17:22
2004.03.05
dbedit


8-12462
DenisSM
2003-10-31 11:44
2004.03.05
BitBlt работает медленно при захвате с одним качеством и...


3-12245
Pavelius
2004-02-09 14:48
2004.03.05
Embedded Database


1-12428
Ivolg
2004-02-24 17:14
2004.03.05
Компонент