机试算法题-求三个矩形相交面积

题目:

在坐标中,给定三个矩形,求三个矩形相交面积,如果没有返回-1。(代码最后写了个最后输出三个矩形相交形成的矩形)
机试算法题-求三个矩形相交面积_第1张图片

思路:

在三个矩形判断其中随意两个矩形是否交,其中两个矩形没有相交,那么肯定没有三个矩形共同的交集。如果其中两个矩形相交了,那么可以让两个矩形形成的新矩形跟第三个矩形进行判断有没有相交。如果两个矩形相交形成的新矩形跟第三个矩形有交集。那形成的矩形就是三个矩形的交集。

代码:

	<script>
		
		let recA={x:1,y:6,w:4,h:4}
		let recB={x:3,y:5,w:3,h:4}
		let recC={x:0,y:3,w:7,h:3}
		//以矩形左上角的点为基点,x为横坐标,y为纵坐标,w为矩形的宽度,h为矩形的高度

		function printPrinter(recA,recB) {	//求出两个矩形相交形成的矩形
			let recLeft = null
			let recRight = null
			let recTop = null
			let recButton = null
			if(recA.x < recB.x){
				recLeft = recA
				recRight = recB
			}else{
				recRight = recA
				recLeft = recB
			}//找到左边的矩形和右边的矩形
			
			if(recLeft.x + recLeft.w <= recRight.x ){
				return {x:-1,y:-1,w:-1,h:-1}
			} //如果左边的矩形x坐标+宽都没大于右边的矩形,说明不相交.
			//如果两个矩形不相交,那么肯定没有三个矩形的公共部分,返回-1
			
			if(recA.y < recB.y){
				recTop = recB
				recButton = recA
			}else{
				recTop = recA
				recButton = recB
			}//同理找到上面的矩形和下面的矩形
			
			if(recButton.y + recButton.h <= recTop.x ){
				return {x:-1,y:-1,w:-1,h:-1}
			}//如果下边的矩形y坐标+高都没大于上边的矩形,说明不相交.
			
			//横竖都有相交了,就可以确定两个矩形相交了,走下面。
			
			//右边矩形的x就是相交后形成矩形的x,下边矩形的y就是相交后形成矩形的y。
			//(x+w)较小的矩形-右边矩形的x就是形成矩形的w,(y+h)较小的矩形-上边矩形的y就是形成矩形的h。
			return {
				x:recRight.x,
				y:recButton.y,
				w:(recLeft.x + recLeft.w)<(recRight.x + recRight.w)?(recLeft.x + recLeft.w- recRight.x):(recRight.x + recRight.w - recRight.x),
				h:(recButton.y + recButton.h)<(recTop.y + recTop.h)?(recButton.y + recButton.h - recTop.y):(recTop.y + recTop.h - recTop.y)
			}//求出两个矩形相交的矩形
		}
		console.log(printPrinter(recA,recB))
		console.log(printPrinter(printPrinter(recA,recB),recC))//求出了三个矩形形成的矩形,那么他们的w*h就是最后要得到的面积。
	script>

你可能感兴趣的:(算法题,前端,javascript,算法)