概述
题目:
在坐标中,给定三个矩形,求三个矩形相交面积,如果没有返回-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>
最后
以上就是陶醉奇迹为你收集整理的机试算法题-求三个矩形相交面积题目:思路:代码:的全部内容,希望文章能够帮你解决机试算法题-求三个矩形相交面积题目:思路:代码:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复