Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   соприкосновение 2-ух объектов (https://javascript.ru/forum/misc/23918-soprikosnovenie-2-ukh-obektov.html)

Раед 11.12.2011 23:37

соприкосновение 2-ух объектов
 
Помогите написать функцию, определяющую соприкасается 2 объекта или нет
на вход подаётся 2 объекта (координаты можно получить, высота и ширина каждого известны)
функция должна вернуть true или false
Вот мой код но он работает не корректно
function touchTwins(el,tw) {
 var elArr = new Array();
 ax = Number(tw.style.left.substring(0,tw.style.left.indexOf('px')));
 ay = Number(tw.style.top.substring(0,tw.style.top.indexOf('px')));
 axx = Number(tw.style.left.substring(0,tw.style.left.indexOf('px')))+15;
 ayy = Number(tw.style.top.substring(0,tw.style.top.indexOf('px')))+15;
 elArr['x1'] = Number(el.style.top.substring(0,el.style.top.indexOf('px')));
 elArr['y1'] = Number(el.style.top.substring(0,el.style.top.indexOf('px')));
 elArr['x2'] = Number(el.style.top.substring(0,el.style.top.indexOf('px')))+36;
 elArr['y2'] = Number(el.style.top.substring(0,el.style.top.indexOf('px')))+66;
 if (tochkTouch(ax,ay,elArr)||tochkTouch(ax,ayy,elArr)||tochkTouch(axx,ay,elArr)||tochkTouch(axx,ayy,elArr)) {
  return true;
 } else {
  return false;
 }
}
function tochkTouch(xt,yt,em) {
 if((em['y1'] < yt)&&(em['y2'] > yt)&&(em['x1'] < xt)&&(em['x2'] > xt)) {
  return true;
 } else {
  return false; 
 }
}

Livanderiaamarum 12.12.2011 00:22

function touchTwins (_el1, _el2)
{
			var
			el1_TopSTART  = parseInt(_el1.style.left, 10), //начальная точка верхнего отрезка 1 квадрата
			el1_TopEND    = el1_TopSTART + parseInt(_el1.style.width, 10), //конечная точка верхнего отрезка 1 квадрата
			el1_leftSTART = parseInt(_el1.style.top, 10), //начальная точка левого отрезка 1 квадрата
			el1_leftEND   = el1_leftSTART + parseInt(_el1.style.height, 10), //конечная точка левого отрезка 1 квадрата

			el2_TopSTART  = parseInt(_el2.style.left, 10), //начальная точка верхнего отрезка 2 квадрата
			el2_TopEND    = el2_TopSTART + parseInt(_el2.style.width, 10), //конечная точка верхнего отрезка 2 квадрата
			el2_leftSTART = parseInt(_el2.style.top, 10), //начальная точка левого отрезка 2 квадрата
			el2_leftEND   = el2_leftSTART + parseInt(_el2.style.height, 10) //конечная точка левого отрезка 2 квадрата


			if ( //теперь сравниваем какой из них левее какой правее какой ниже какой выше
				el2_TopSTART>el1_TopEND ||   //если начало верхней грани 2 дальше влево чем конец верхней грани 1
				el1_TopSTART>el2_TopEND ||   //ИЛИ если начало верхней грани 1 дальше влево чем конец верхней грани 2
				el2_leftSTART>el1_leftEND || //ИЛИ если начало левой грани 2 дальше вниз чем конец левой грани 1
				el1_leftSTART>el2_leftEND    //ИЛИ если начало левой грани 1 дальше вниз чем конец левой грани 2
			   )
			{ //то тогда они в любом случае не пересекаются
						return false // пересечения нет
			}
			else{ //иначе есть пересечение
						/*и тут кстати можно высчитать область наложения))) если нужно
						 *напрмиер можно возвращать число 1 если они просто пересекаются, и 2 если они совпадают
						 */
						return true //пересечение есть
			}
}

ksa 12.12.2011 09:15

Цитата:

Сообщение от Раед
соприкасается 2 объекта или нет

Что имеется ввиду? Их координаты (верха или низа, левого или правого края) различяются в 1px?

Livanderiaamarum 12.12.2011 10:56

Цитата:

Сообщение от ksa (Сообщение 142130)
Что имеется ввиду? Их координаты (верха или низа, левого или правого края) различяются в 1px?

имеется ввиду 2 функции пересекаются ли обьекты, и вторая - совпадают ли обекты, по крайней мере именно это он пытался определить. в любом случае как человек сформулировал так ему и ответили))

Раед 12.12.2011 18:32

Огромное спасибо
Это то что нужно:)


Часовой пояс GMT +3, время: 13:04.