Перемещение по траектории

Печать RSS
206

Автор
Пацак
0
вот пишу на PHP + JS проект.
Имеется плоскость по которой перемещается шарик данные о координатах браузер получает через AJAX - Json и плавно перемещает его с начальной точки на новую взятой из БД и полученной через Ajax.
Но вот дилемма! у меня есть не только этот перемещаемый эллемент на плоскости но и еще один который может быть как динамическим так и статистическим но это не важно! важно то что вышеуказанный шарик должен постоянно стремится перейти к данному эллементу и я никак не могу себе представить процес того как узнать через PHP в которую сторону двигатся шарику и как это записать в коде (PHP)!?
т.е при следующем запросе в БД сначала должны записатся новые координаты (не возле того Эллемента) а в диапазоне 5 шагов от предыдущего месторасположени но больше приблизится к пункту назначения smile ))
извени все очень запутанно и трудно в этом разобраться но думаю что в общех чертах суть проблемы описана и понятна буду рад любому совету только по теме!
Автор
Пацак
0
что никто не знает?
Автор
Пацак
0
ладно пока что сделаю что б эллемент перемещался по x оси до параллельного положения со вторым эллементом а потом буду его поднимать по y оси, но это не то что нужно! мне нужно что бы код сам определял диагональ и перемещался по ней! если кто знает жду советов... заранее спсибо!
Автор
Пацак
0
пришла в голову одна идея возможно комуто понадобится...
вобщем данный элемент сам выбирает в какую сторону ему переместится но перед тем как переместить его туда мы проверяем становится ли растояние между двумя координатами на любой из осей меньше если да то даем ему зеленный свет- если нет тогда действие выбора передвижение рекурсивно запускается до правильного варианта.
идея не совершенна поскольку объект все равно передвигается не вертикально хоть и его движение более похоже на логическое поведение хоть и немного пъяного существа smile
поетому я жду совершенных идей...
А

Оранжевые штаны
0
Если правильно понял.
Шарик движется, запомнили текущие координаты x,y. Через некоторые время запомнили x2,y2.
<?php
function shar($x,$y,$x2,$y2)
if($x==$x1 && $y==$y2) return 'не двигается';
if($x>$x1 && $y==$y2) return 'вправо';
if($x<$x1 && $y==$y2) return 'влево';
if($x==$x1 && $y>$y2) return 'вниз';
if($x==$x1 && $y<$y2) return 'вверх';
if($x<$x1 && $y<$y2) return 'по диагонали вправо вверх';
if($x>$x1 && $y>$y2) return 'по диагонали влево вниз';
if($x<$x1 && $y>$y2) return 'по диагонали влево вверх';
if($x>$x1 && $y<$y2) return 'по диагонали вправо вверх';
}
Изменил: Александр (26.10.2010 / 09:02)
Автор
Пацак
0
5. Муз-ТВ, блин мне нужен не процес перемещения тем более данные в который нужно вбивать самому, а вычисление кодом диагонали между двумя точками на плоскости и при каждом обновлении стр. что б один из элементов допустим "А" перемешался к элементу "Б" с шагом в 5px
А

Оранжевые штаны
0
$Diagx=$Ax-$Bx;
$Diagy=$Ay-$By;

if($Diagx!=0) перемещаемся на 5 по х
если меньше 0 то на -5
if($Diagy!=0) перемещаемся на 5 по y
если меньше 0 то на -5

чем так не нравится?, может не по ровной линии но дойдет до точки.
Автор
Пацак
0
7. Муз-ТВ, читай выше я именно так и сделал пока не дадут более интересной идее... мне собственно и ненужно что б он именно по прямой дагонался. все равно спасибо!
правда помоему уже более интересной и не дадут!?
А

Оранжевые штаны
0
8, разве что rand(), будет интересно).
Автор
Пацак
0
	function distance ($a, $b)
	{
		if ($a['x'] < $b['x'])
		{
			$x = ($b['x'] - $a['x']);
		} else {
			$x = ($a['x'] - $b['x']);
		}
		
		if ($a['y'] < $b['y'])
		{
			$y = ($b['y'] - $a['y']);
		} else {
			$y = ($a['y'] - $b['y']);
		}
		
		return Array ('x' => $x, 'y' => $y);
	}
	
	function automoved ($id, $xy)
	{
		$array = nps ($id);
		
		$rand = rand (1,4);
		
		$array['x'] = (int)$array['x'];
		$array['y'] = (int)$array['y'];
		
		if ($rand == 1)
		{
			$moved = array (
				'x' => ($array['x'] + 5), 'y' => ($array['y'])
			);
		} else if ($rand == 2) {
			$moved = array (
				'x' => ($array['x'] - 5), 'y' => ($array['y'])
			);
		} else if ($rand == 3) {
			$moved = array (
				'x' => ($array['x']), 'y' => ($array['y'] + 5)
			);
		} else if ($rand == 4) {
			$moved = array (
				'x' => ($array['x']), 'y' => ($array['y'] - 5)
			);
		}
		
		$distance = distance (array ('x' => $array['x'],'y' => $array['y']), $xy);
		
		$x = (int) $distance['x'];
		$y = (int) $distance['y'];
		
		$d = distance ($moved, $xy);
		
		$nx = (int) $d['x'];
		$ny = (int) $d['y'];
		
		if ($nx < $x or $ny < $y)
		{
			
			return $moved;
			
		} else {
			return automoved ($id, $xy);
			
		}
	}

Добавлено через 02:18 сек.
выше выложил две функции они и осуществляют передвижение объекта в 5px только с интервалом в 2сек. я беру новую позицию через Ajax и ресую его позицию на плоскости...
Изменил: Веталь (26.10.2010 / 20:43)
Стикеры / Теги / Правила / Топ тем / Топ постов / Поиск