Из т.А в т.В двигаясь по Sin

 
0
 
Algorithms
ava
СерегаГоляков | 02.10.2013, 16:17
Есть две известные точки х0,у0 и х1,у1

Необходимо из  х0,у0 попасть в х1,у1, двигаясь змейкой.

Максимум на что меня хватило это вычислить угол между точками и горизонталью:


double A = Math.Atan2( y-y0, x - x0) * 180/ Math.PI ;
A = (A < 0) ? A + 360 : A;

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

Подскажите формулки, пожалуйста.
Comments (5)
ava
Pavia | 02.10.2013, 15:51 #
v=(x1-x0)/(t1-t0); // вычисляем скорость от заданного времени
Alfa=Math.Atan2( y1-y0, x1 - x0); // вычисляем угол поворота.

dt=(GetTickCount()-LastTickCount)/1000; // измеряем время, так как оно течёт не равномерно

// Вычисляем наши координаты относительно точки старта.
p.x=v*dt;
p.y=sin(x);

Вращаем относительно этой точки

Rotate(p,Alfa);

// Переносим систему координат из системы объекта в мировую.
p.x=p.x+x0;
p.y=p.y+y0;

t=t+dt;
if (t>=t1) { // проверяем время
p.x=x1;
p.y=y1;
}
  

Здесь
Rotate(p,Alfa);
//Обычное вращение точки относительно начала координат.
// Заполняем матрицу вращения
M[0,0]=+cos(Alfa); M[0,1]=-Sin(Alfa);
M[1,0]=+Sin(Alfa); M[1,1]=+cos(Alfa);
// запоминаем временную переменную.
tempP=p;
// Умножаем матрицу на вектор
p.x:=tempP.x*M[0,0]+tempP.y*M[1,0];
p.y:=tempP.x*M[0,1]+tempP.y*M[1,1];
ava
_Y_ | 02.10.2013, 16:28 #
Задача поставлена как-то некорректно. По двум точкам можно провести чертову уйму синусоидал'ных змеек. Например, прямая, соединяющая 2 точки тоже может быт' описана синусом, но с очен' бол'шим периодом.

Какая змейка нужна-то?
ava
Lipetsk | 03.10.2013, 08:34 #
ava
СерегаГоляков | 05.10.2013, 05:38 #
Необходимо постепенно измерять координаты, чтобы в результате переместиться из точки А в точку В двигаясь не по прямой, а красиво змейкой.
ava
_Y_ | 05.10.2013, 11:59 #
Ну, есил Вам все равно какая будет змейка, лишь бы красиво, то можно сделать очень просто. Примерно так.
  • Разворачиваете систему координат так, чтобы обе точки лежали на оси X.
  • Строите в этой новой системе координат синусоиду, выбрав ее период так, чтобы между двумя точками поместилось целое число полупериодов.
  • Разворачиваете построенную синусоиду в исходную систему координат.
  • Выводите результат поточечно - плавно и красиво.
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
advanced
Submit