Движение точки по прямой из пункта A в пункт Б

Итак, продолжим изучение движения на яваскрипте. Сегодня я хочу показать простой пример организации движения объекта по прямой. Для реализации движения мы применим тот же способ, что и в предидущем примере про движение точки по окружности, только с разницой в формуле. И опять нам прийдется вспомнить школьный курс математики :) , а именно теорему подобия. Вы все конечно её помните ;) .
Начальной точкой будут текущие координаты точки, конечные мы будем указывать в ручную.
Параметры:
x – конечные координаты точки по оси х
y – конечные координаты точки по оси у
d – шаг в пикселях
obid – id объекта
timeout – временной интервал

Ну а теперь реализация:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// задаём начальные данные как всегда инит функцией
function init_move_line(x,y,d,obid,timeout) {
    var obj=document.getElementById(obid);
// перемещаем нашу начальную точку в ноль
    dx = (x-obj.offsetLeft);
    dy = (y-obj.offsetTop);
// определяем расстояние которое нам необходимо будет пройти
    var line=Math.sqrt(dx*dx+dy*dy);
// рассчитываем дискретность движения
    dx=d*dx/line;
    dy=d*dy/line;
    dc=line;
// запускаем рекурсивное изменение координат точки
    moveL(obj.offsetLeft,obj.offsetTop,x,y,dx,dy,dc,obid,timeout);
}

А теперь реализация основного движения

1
2
3
4
5
6
7
8
9
10
function moveL(x0,y0,x,y,dx,dy,dc,obid,timeout){
    obj=document.getElementById(obid);
    x0 += dx;
    y0 += dy;
// уменьнаем длину расстояния, которое надо пройти
    dc-=Math.sqrt(dx*dx+dy*dy);
    obj.style.left=parseInt(x0)+"px";
    obj.style.top=parseInt(y0)+"px";
    if(dc>0) setTimeout("moveL("+x0+","+y0+","+x+","+y+","+dx+","+dy+","+dc+",'"+obid+"',"+timeout+")" , timeout);
}

Вот код примера:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<html>
<head>
<script type="text/javascript">
var x,y,obj,corner,dc;
function init_move_line(x,y,d,obid,timeout) {
    var obj=document.getElementById(obid);
    dx = (x-obj.offsetLeft);
    dy = (y-obj.offsetTop);
    var line=Math.sqrt(dx*dx+dy*dy);
    dx=d*dx/line;
    dy=d*dy/line;
    dc=line;
    moveL(obj.offsetLeft,obj.offsetTop,x,y,dx,dy,dc,obid,timeout);
}
function moveL(x0,y0,x,y,dx,dy,dc,obid,timeout){
/*
x - конечные координаты точки по оси х
y - конечные координаты точки по оси у
d - шаг в пикселях
obid - id объекта
timeout - временной интервал
*/
    obj=document.getElementById(obid);
    x0 += dx;
    y0 += dy;
    dc-=Math.sqrt(dx*dx+dy*dy);
    obj.style.left=parseInt(x0)+"px";
    obj.style.top=parseInt(y0)+"px";
    if(dc>0) setTimeout("moveL("+x0+","+y0+","+x+","+y+","+dx+","+dy+","+dc+",'"+obid+"',"+timeout+")" , timeout);
}
</script>
</head>
<body>
<input type="button" onclick="init_move_line(500,300,2,'move',20)" />
<div id="move" style="position:absolute;height:3px;width:3px;background-color:#000000;left:200px;top:300px"></div>

</body>
</html>



Рекомендуем почитать

 

Добавить комментарий


Ваше имя:


Комментарий:


Введите: Картинка