-
Как сделать отклонение вектора на опр. угол?
Собсно мне нужен разлёт частиц, вектор это общее направление, разлёт это насколько они теоритически могут отклониться...
-
Ой забыл сказать что это в 3D всё =)
-
x = x0*cos(a)-y0*sin(a)
y = x0*sin(a)+y0*cos(a)
x0, y0 - начальные координыты
a - угол поворота
-
а для Z ??
-
Матрица поворота вокруг оси Ох:
1 0 0 0
0 cos(a) -sin(a) 0
0 sin(a) cos(a) 0
0 0 0 1
Матрица поворота вокруг оси Оy:
cos(a) 0 sin(a) 0
0 1 0 0
-sin(a) 0 cos(a) 0
0 0 0 1
Матрица поворота вокруг оси Оz:
cos(a) -sin(a) 0 0
sin(a) cos(a) 0 0
0 0 1 0
0 0 0 1
Для поворота умножаешь свой вектор на нужную тебе матрицу поворота.
-
> Собсно мне нужен разлёт частиц, вектор это общее направление,
> разлёт это насколько они теоритически могут отклониться.
> ..
Для этого надо знать, свойства системы частиц, что является основой для "разлета" и в каком силовом поле это происходит.
В итоге - математическую модель конкретного физического явления.
-
> Efir © (04.06.07 17:12) [4]
>
> Матрица поворота вокруг оси Ох:
Ему же нужно вращать не вокруг осей, а отклонить вектор от заданного на определённый угол, в случайном направлении.
-
>Jeem (06.06.07 01:22) [6]
>Ему же нужно вращать не вокруг осей, а отклонить вектор от заданного на >определённый угол, в случайном направлении.
Именно так.
>Jeer © (05.06.07 14:29) [5]
>Для этого надо знать, свойства системы частиц, что является основой для >"разлета" и в каком силовом поле это происходит.
>В итоге - математическую модель конкретного физического явления.
Для игры мне подойдет и фальш. система, в 3D Max тоже система строится вовсе не на физ. законах, а на указанных параматрах, у меня параметры примерно те-же, в данном слачае я спрашиваю как сделать аналог Spread в максе???
>Efir © (04.06.07 17:12) [4]
>Для поворота умножаешь свой вектор на нужную тебе матрицу поворота.
А на делфях код готовый есть, а то я токо C++ нагуглил, я переведу кончно но просто вдрег есть.. И ещё там везде говорится что вектор должен быть размерностью одинаков с матрицей, т.е он должен быть из 4 значаний, 4-длина?
P.S:Прости я просто нуб в векторах....
-
> 4 значаний, 4-длина?
4 - время ( шутка :) )
На сколько я знаю 4-я компонента всегда нулевая - забей на нее. (т.к. используется только в матрицах преобразования для трансляции - паралелльного переноса)
а по поводу разлета... имхо нужно копать в сторону циллиндрических систем координат... и брать случайный угол при одинаковых остальных двух координатах в этой системе
-
4я компонента - это т.н. W-координата, забивать не стоит :o) можно с ней "поиграцо" и посмотреть что получится в результате ее изменения
-
Надо сначала предположить, что допустим у нас вектор идёт вдоль оси Z на единицу, а координаты X и Y вычислить как случайные числа, из заданной области разброса.
А потом повернуть полученные векторы из направления вдоль оси Z на нужное направление.
-
> На сколько я знаю 4-я компонента всегда нулевая - забей
> на нее.
Не 0, а 1.
0*x = 0
1*x = x
какой из вариантов не меняетя значение? 1!
Поэтому и матрица стандартная единичная, а не нулевая.
-
> Не 0, а 1
хм.. и для векторов тоже??
-
Решаем систему из двух уравнений:
v1.x*v0.x+v1.y*v0.y+v1.z*v0.z=Alpha
v1.x*v1.x+v1.y*v1.y+v1.z*v1.z=1
При этом:
0<=v1.x<=1
0<=v1.y<=1
0<=v1.z<=1
Где
v1 - искомый вектор
v0 - заданное направление, нормализованный вектор
Alpha - тот самый разлет, т.е отклонение получаемого вектора от задаваемого направления
Одну компоненту v1 задаем случайным образом из интервала [0, 1], в этом случае система разрешима, и будет получен вектор удовлетворяющий условию.
-
А я нашол всё нужные функции в том числе и поворот вектора в GLScene, надо почаше смотреть будет что там есть =)
-
> Jkot © (12.06.07 17:37) [14]
>
> А я нашол всё нужные функции в том числе и поворот вектора
> в GLScene, надо почаше смотреть будет что там есть =)
Так покажи же нам их!
-
> Chemodan © (12.06.07 10:06) [13]
ой ли?
-
Удалено модератором
-
Удалено модератором