日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java判断线与矩形相交_判断任意多边形与矩形的相交(线段与矩形相交或线段与线段相交)...

發布時間:2024/1/8 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java判断线与矩形相交_判断任意多边形与矩形的相交(线段与矩形相交或线段与线段相交)... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

任意多邊形與矩形的相交,其實就是判斷多條線段是否與這個矩形相交,再簡單點就是判斷線段是否與矩形的每一條邊相交了。那現在,我們先來看看判斷一條線段與矩形的其中一條線段的相交的情況(上方水平線):

(圖形中的a/b=d/c如果看不明白的,我也無語了,回去翻下幾何圖形的那中學課本。)圖中已知的是紅色的線段,就是要檢測的線段,其起點就是star,重點是end,其坐標是已知的。圖中的藍色線是輔助理解的線。而圖中的y0,x1,x2是矩形的其中一條線的參數,那,下面我們從代碼去理解一下:

publicstaticboolPointInLine(Vector2?point,?Vector2[]?vertices,floataccuracy)

{if(point==null||(vertices==null||vertices.Length<2))returnfalse;

Rect?pointRect=newRect();

pointRect.Width=accuracy*2;

pointRect.Height=accuracy*2;

pointRect.Center=point;returnLineIntersectRect(vertices,?pointRect);

}

其中point參數就是要檢測的點,vertices是被檢測的線段集合,accuracy是其精確性,如果為0,則精確到點,如果存在一定的模糊性,可以給這個參數賦值。(做圖形開發的時候,鼠標點要精確到某條線上,那要求太高了,因此,一般會設置其精確值,這個值越小越精確。)從這段代碼中可以理解成N條線段vertices去檢測是否與這個存在一定精確性的矩形相交,那下面看看這個函數LineIntersectRect的代碼:

publicstaticboolLineIntersectRect(Vector2[]?vertices,?Rect?rect)

{if((vertices==null||vertices.Length<2)||rect==Rect.Empty)returnfalse;for(inti=0;?i

{if(CheckRectLine(vertices[i],?vertices[i+1],?rect))returntrue;

}returnfalse;

}

這段代碼很好理解,就是從數組中每2點去檢測其是否與這個矩形相交。下面就看看CheckRectLine檢測其線段與矩形檢測的代碼:

privatestaticboolCheckRectLine(Vector2?start,?Vector2?end,?Rect?rect)

{boolresult=false;if(rect.Contains(start)||rect.Contains(end))

result=true;else{

result|=CheckRectLineH(start,?end,?rect.LeftTop.Y,?rect.LeftTop.X,?rect.RightBottom.X);

result|=CheckRectLineH(start,?end,?rect.RightBottom.Y,?rect.LeftTop.X,?rect.RightBottom.X);

result|=CheckRectLineV(start,?end,?rect.LeftTop.X,?rect.LeftTop.Y,?rect.RightBottom.Y);

result|=CheckRectLineV(start,?end,?rect.RightBottom.X,?rect.LeftTop.Y,?rect.RightBottom.Y);

}returnresult;

}

線段與矩形是否相交的方法就變成了線段與矩形的4條邊是否相交進行檢測。這里,該方法CheckRectLineH是水平方向上的檢測,就是檢測矩形的上邊線與下邊線,那CheckRectLineV就是檢測矩形的左邊線和右邊線了。我們先來看下CheckRectLineH這個函數的代碼,然后再看看圖來進行分析:

privatestaticboolCheckRectLineH(Vector2?start,?Vector2?end,floaty0,floatx1,floatx2)

{//直線在點的上方if((y0start.Y)&&(y0>end.Y))returnfalse;//水平直線if(start.Y==end.Y)

{//水平直線與點處于同一水平。if(y0==start.Y)

{//直線在點的左邊if((start.Xx2)&&(end.X>x2))returnfalse;//直線的部分或者全部處于點與x2垂直線之間returntrue;

}else//水平直線與點不處于同一水平。{returnfalse;

}

}//斜線floatx=(end.X-start.X)*(y0-start.Y)/(end.Y-start.Y)+start.X;return((x>=x1)&&(x<=x2));

}

看完代碼,我們再看最開始時候的圖,協助分析,我們可以想到這個函數其實就是檢測X1與Y0的交點與X2與Y0的交點是否與紅色線段是否相交,如果相交,則判斷其交點是否在x1與x2之間的范圍。(根據調用的參數,可以知道其正好就是上下邊線)我們根據圖的理解,可以得出:

a=(end.X - start.X),b=(end.Y - start.Y),c=(y0 - start.Y),d=start.X+x。從而可以得出

x = (end.X - start.X) * (y0 - start.Y) / (end.Y - start.Y) + start.X。

同理,CheckRectLineV的分析剛好是x和Y倒轉過來。下面貼出代碼:(分析就不再細說了)

privatestaticboolCheckRectLineV(Vector2?start,?Vector2?end,floatx0,floaty1,floaty2)

{if((x0start.X)&&(x0>end.X))returnfalse;if(start.X==end.X)

{if(x0==start.X)

{if((start.Yy2)&&(end.Y>y2))returnfalse;returntrue;

}else{returnfalse;

}

}floaty=(end.Y-start.Y)*(x0-start.X)/(end.X-start.X)+start.Y;return((y>=y1)&&(y<=y2));

}

備注:這里由于是用Vortex2D的源碼進行分析的,其中Vector2其實就是point的類型,只是該Vector2封裝了更多的方法而已。其Rect的類型也不是系統的Rect,也是Vortex2D自己封裝了更多方法的Rect類型,如果大家在使用該部分代碼時,有編譯出錯的情況,請注意自行修改。這里提出的是一個思路。懂得了這個思路,自然就懂得如何修改各自的代碼。

總結

以上是生活随笔為你收集整理的java判断线与矩形相交_判断任意多边形与矩形的相交(线段与矩形相交或线段与线段相交)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲一卡二卡 | 中文字幕无码精品亚洲资源网久久 | 亚洲一区二区三区久久久 | 日本成人网址 | 亚洲精品鲁一鲁一区二区三区 | 精品一区二区三区电影 | 咪咪色图| 男人激情网 | 日韩久久中文字幕 | 男人的天堂免费视频 | 91色在线视频 | 国产wwwwwww | 18深夜在线观看免费视频 | caopor超碰| 色站综合| 久草免费在线视频观看 | 久久久久香蕉 | 草草草在线观看 | 日韩色道 | 日本特黄视频 | 亚洲精品一区二区三区蜜桃久 | 欧美 日韩 国产 成人 在线 | 日本三级精品 | 亚洲一区二区三区久久久 | 国产美女明星三级做爰 | 8x8ⅹ成人永久免费视频 | 秋霞一区 | 成人在线观看www | 久久综合福利 | 欧美精品一线 | 一卡二卡三卡视频 | 亚洲精品国产精品乱码不卡√香蕉 | 青青插| 国产精品视频一区二区三区, | 极品色影视 | 久久香蕉精品 | 亚洲国产精品视频在线观看 | 国产视频一区二区在线 | 狠狠操亚洲 | 欧美一级淫片免费视频魅影视频 | 国产日韩一级 | 亚洲av成人精品日韩在线播放 | 日日夜夜精品视频免费 | 播放毛片 | 成人欧美一级特黄 | 久久久久一区二区三区 | 成人影视免费观看 | 国产日韩精品一区二区三区 | 北条麻纪在线观看aⅴ | 熟妇人妻无乱码中文字幕真矢织江 | 福利国产在线 | 97超碰伊人 | 成人3d动漫一区二区三区91 | 欧美一区二区三区在线 | 97人人模人人爽人人少妇 | 欧美午夜精品一区二区三区 | 国产精品成人免费一区二区视频 | 成人av电影网站 | 欧美精品一区二区在线播放 | 麻豆视频官网 | 激情三级在线 | 警察高h荡肉呻吟男男 | 国产精品欧美激情在线播放 | 夜晚福利视频 | www.色播.com| 日韩精品播放 | 国产不卡在线观看 | 日日干干| 无码国产69精品久久久久网站 | 亚洲区自拍偷拍 | 日本韩国中文字幕 | 亚洲h网站| 日韩黄大片 | 日本久久一区二区 | 久久久久久久色 | 成人国产精品一区二区 | 精品人妻一区二区三区换脸明星 | 欧美三区四区 | 国产乱码av | 人妻无码一区二区三区久久99 | 极品熟妇大蝴蝶20p 国产偷自拍视频 | 青娱乐最新官网 | 黄色自拍视频 | 少妇无码一区二区三区免费 | 樱空桃在线 | 国产成人aⅴ| www.久久久久.com | 天堂中文在线观看 | 午夜在线免费观看 | 日本a一级 | 欧美性tv| caobi视频 | 亚洲美女在线播放 | 欧美亚洲国产日韩 | 国产精品久久久久久亚洲影视 | 久久久久久久久久艹 | 九九亚洲视频 | 琪琪色综合网 | 在线观看9.1 |