![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Просто не хочу этим заниматься, извините.
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Честно говоря, я не знаю, где лежат исходники. Тем более, я на работе.
Вообще говоря, там какой-то ужас с физикой, поэтому лучше сделать на трезвую голову самостоятельно. |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Цитата:
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Гы, а у меня не сползает
![]() Да я особо и не стремился сделать реальную физику, главное эффект получить, а ньюансы не каждый заметит ![]() |
|
|||||
|
помурыжил алгорит, сделал. всё-таки беда была из-за непоняток с осями. неправильные декартовые они) и поврот теперь относительно точки захвата что из-за всяких погрешностей она оставалась реально там же, где и курсор.
вот пример http://inreflected.com/fljot/test/#gallery_id=085 дальш всякие инерции можно приделывать, мне вроде не надо код функции, отвечающей за таскание: function phys_drag() {
hold_x = _root._xmouse; //координата x точки захвата
hold_y = _root._ymouse; //координата y точки захвата
this.onMouseMove = function() {
//коориднаты центра объекта
center = {_x: this._x, _y: this._y};
//точка захвата: _root._xmouse, _root._ymouse
//координаты цетра тяжести
rotation_center = {_x: 2*center._x - _root._xmouse, _y: 2*center._y - _root._ymouse};
//удаление от центра фоты (относительно 1/2 диагонали)
d_from_center = Math.sqrt(((Math.pow((_root._xmouse - center._x),2) + Math.pow((_root._ymouse - center._y),2))) / _global.diagonal_length);
//коэф поворота
K_rotation = Math.pow(d_from_center, 2);
//смещение мыши(=точки захвата) в абс СК (система координат)
_global.hold_dx = _root._xmouse - hold_x; _global.hold_dy = _root._ymouse - hold_y;
//вектор локальной оси X (в абс координатах)
loc_Xaxis_x = hold_x - center._x; loc_Xaxis_y = hold_y - center._y;
//определяем угол между абс СК и локальной СК. через скалярное произведение [1,0](=ось X) и локальной оси x
cos_fi = loc_Xaxis_x/(Math.sqrt(loc_Xaxis_x*loc_Xaxis_x + loc_Xaxis_y*loc_Xaxis_y));
fi = Math.acos(cos_fi);
if (loc_Xaxis_y > 0) fi = - fi; //от -pi до pi
//вычисляем относительное смешение вдоль локальных осей(в локальной СК)
//т.е. переводим смещение hold_dx и hold_dy в локальную СК
loc_dx = hold_dx*Math.cos(fi) - hold_dy*Math.sin(fi); //смещение по x в локальной
loc_dy = hold_dx*Math.sin(fi) + hold_dy*Math.cos(fi); //смещение по y в локальной
//вычисляем угол поворта. из прямоугольного треугольника,
//противоположный нужному углу катет - это вектор смещения курсора в проекции на локальную ось Y
//прилегающий катет - расстояние от точки захвата до центра тяжести
//С УЧЁТОМ КОЭФ ПОВОРОТА
rel_dy_x = loc_dy*Math.sin(fi); //x-компонента проекции вектора смещения на локальную ось Y
rel_dy_x_rot = rel_dy_x*K_rotation; //x-компонента проекции вектора смещения на локальную ось Y С УЧЁТОМ КОЭФ ПОВОРОТА
rel_dy_y = loc_dy*Math.cos(fi); //y-компонента проекции вектора смещения на локальную ось Y
rel_dy_y_rot = rel_dy_y*K_rotation; //y-компонента проекции вектора смещения на локальную ось Y С УЧЁТОМ КОЭФ ПОВОРОТА
tan_psi = Math.sqrt(Math.pow(rel_dy_x_rot,2) + Math.pow(rel_dy_y_rot,2))/(2*Math.sqrt(Math.pow(loc_Xaxis_x,2) + Math.pow(loc_Xaxis_y,2)));
psi = Math.atan(tan_psi);
if (loc_dy < 0) psi = -psi;
//поворачиваем на угол. вращение вокруг точки захвата
this.rotation(psi, this._parent._xmouse, this._parent._ymouse);
//вычисляем как надо сместить центр(переводим смещение в абс СК)
//сместить его надо на смещение вдоль локальной оси X и на остаток от смещения вдоль локальной Y (из-за коэф поворота)
//смещаем центр
//fi = 2*Math.PI - fi;
this._x += _global.hold_dx;
this._y += _global.hold_dy;
//записываем новые координаты мыши для вычисления
//вектора смещения в следующей ветви
hold_x = _root._xmouse;
hold_y = _root._ymouse;
updateAfterEvent();
}
}
Последний раз редактировалось fljot; 18.07.2007 в 16:48. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
А функциональная нагрузка сего действа какая?
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Тогда где тень от фотографии на «столе»?
|
![]() |
![]() |
Часовой пояс GMT +4, время: 19:33. |
|
|
« Предыдущая тема | Следующая тема » |
|
|