Allegro使用Skill语言实现根据两点p1,p2确定的线段判断是否与bbox构成的矩形相交的函数

/*****************判断两点p1,p2确定的线段是否与bbox构成的矩形相交的算法*******************/
defun(isLineIntersectRectangle (p1 p2 bbox)
	x1=car(p1)
	y1=nth(1 p1)
	x2=car(p2)
	y2=nth(1 p2)
	lineHeight=y1-y2
	lineWidth=x2-x1
	xb=car(car(bbox))
	yb=nth(1 car(bbox))
	xe=car(nth(1 bbox))
	ye=nth(1 nth(1 bbox))
	c=x1*y2-x2*y1
	let((res)
		if(lineHeight*xb+lineWidth*yb+c>=0 && lineHeight*xe+lineWidth*ye+c<=0
		||(lineHeight*xb+lineWidth*yb+c<=0 && lineHeight*xe+lineWidth*ye+c>=0)
		||(lineHeight*xb+lineWidth*ye+c>=0 && lineHeight*xe+lineWidth*yb+c<=0)
		||(lineHeight*xb+lineWidth*ye+c<=0 && lineHeight*xe+lineWidth*yb+c>=0) then
		if(xb>xe then
			temp=xb
			xb=xe
			xe=temp
		)
		if(ybxe && x2>xe) || (y1>yb && y2>yb) || (y1

 

你可能感兴趣的:(02_软件)