Показать сообщение отдельно
Старый 16.01.2007, 18:38
petrochenko1981 вне форума Посмотреть профиль Отправить личное сообщение для petrochenko1981 Найти все сообщения от petrochenko1981
  № 3  
Ответить с цитированием
petrochenko1981

Регистрация: Oct 2005
Сообщений: 106
//Функция, которая проверяет пересечение двух линий>>>>---------------------------
Код:
function Peresechenie(x11,y11,x12,y12,x21,y21,x22,y22 : Number) : Number {
var s,xx,yy,t1,t2,t : Number = null;
var D,D1,D2 : Number = null;
s=0;
D=(y12-y11)*(x21-x22)-(y21-y22)*(x12-x11);
D1=(y21-y11)*(x21-x22)-(y21-y22)*(x21-x11);
D2=(y12-y11)*(x21-x11)-(y21-y11)*(x12-x11);
if (D<>0){
	t1=D1/D;
	t2=D2/D;
	if ((t1<=1) && (t1>=0) && (t2>=0) && (t2<=1)){
		s=1;
		xx=x11+(x12-x11)*t1;
		yy=y11+(y12-y11)*t1;
	}
}else {	
	if ((D1==0) && (D2==0)){
		if (x11<>x12){
			t1=(x21-x11)/(x12-x11);
			t2=(x22-x11)/(x12-x11);
		}else{
			if (y11<>y12){
				t1=(y21-y11)/(y12-y11);
				t2=(y22-y11)/(y12-y11);
			}
		}
		if (t1>t2){
			t=t2;
			xx=x21;
			yy=y21;
			t2=t1;
			x21=x22;
			y21=y22;
			t1=t
			x22=xx;
			y22=yy;
		}
		if (t1<0){			
			if (t2>=1){
				s=2;
			}else{
				if (t2>0){
					s=2;
					x12=x22;
					y12=y22;
				}else{
					if (t2==0){
						s=1;
						xx=x11;
						yy=y11;
					}
				}
			}
		}else{
			if (t1<=1){
				if (t1==1){
					s=1;
					xx=x12;
					yy=y12;
				}
				else{
					s=2;
					x11=x21;
					y11=y21;
					if (t2>=1){
						x12=x22;
						y12=y22;
					}
				}
			}
		}
	}	
}
	return s;
}
x11,y11,x12,y12,x21,y21,x22,y22 - координаты отрезков, если return s != 0, то значит пересекаются или один отрезок продолжает другой. Ну потесть и все понятнро будет, s может только трем значения равняться 0,1,2


Последний раз редактировалось iNils; 16.01.2007 в 19:01.