任何人都有一個簡單的算法呢?無需旋轉或任何東西。只需找出由兩點構成的線段與正方形相交檢測線段是否相交正方形
4
A
回答
4
此代碼應該做的伎倆。它檢查線條與邊線相交的位置,然後檢查它是否在正方形的寬度內。返回的intesections的數量。
float CalcY(float xval, float x0, float y0, float x1, float y1)
{
if(x1 == x0) return NaN;
return y0 + (xval - x0)*(y1 - y0)/(x1 - x0);
}
float CalcX(float yval, float x0, float y0, float x1, float y1)
{
if(x1 == x0) return NaN;
return x0 + (yval - y0)*(y1 - y0)/(x1 - x0);
}
int LineIntersectsSquare(int x0, int y0, int x1, int y1, int left, int top, int right, int bottom)
{
int intersections = 0;
if(CalcX(bottom, x0, y0, x1, y1) < right && CalcX(bottom, x0, y0, x1, y1) > left ) intersections++;
if(CalcX(top , x0, y0, x1, y1) < right && CalcX(top , x0, y0, x1, y1) > left ) intersections++;
if(CalcY(left , x0, y0, x1, y1) < top && CalcY(left , x0, y0, x1, y1) > bottom) intersections++;
if(CalcY(right , x0, y0, x1, y1) < top && CalcY(right , x0, y0, x1, y1) > bottom) intersections++;
return intersections;
}
注:此代碼是理論上的,可能是不正確的,因爲它沒有經過測試
1
0
這裏有一個辦法:
- 用X座標
正方形的頂點排序 - 排序的線的通過x座標
端點 - 計算從行的其minX結束角度到每個中間的兩個的(由X-座標)的正方形頂點
- 計算線路
的角度 - 如果線的角度是可能的角度,所有你需要做的就是長度檢查,是maxX線的末端>方形的minX頂點
如果廣場直接面對線條,這可能會中斷,在這種情況下,通過檢查廣場的第一個邊緣來處理它。
相關問題
- 1. 如何檢查線段是否與矩形相交?
- 2. 檢測是否折線相交多邊形
- 3. 檢測多邊形是否有相交線(領結)
- 4. 2維射線與正方形相交
- 5. 檢查多邊形是否自相交
- 6. 確定線段是否與圓形相交的公式(平面)
- 7. 如何檢測多邊形是否具有自相交?
- 8. Android Studio - V2地圖 - 檢查多段線是否與其他多段線相交
- 9. 如何檢查兩條線段是否相交?
- 10. 如何檢查段是否與任何線相交?
- 11. 檢測光線是否與物體相交的函數
- 12. 檢測多條彎曲線是否相交
- 13. 檢查長方形座標是否與python相交
- 14. 檢測一個double是否是Java中的完美正方形
- 15. 檢查矩陣是否正方形? (Python)
- 16. 檢查線段是否與從特定點繪製的垂直線相交?
- 17. 檢測旋轉矩形相交
- 18. 線段相交,數值穩定測試
- 19. 線段球相交測試C++
- 20. 檢測並找到相交線與立方貝塞爾三角形
- 21. MKPolyline檢測自相交線目標C
- 22. 檢測與精靈相交的光線
- 23. 一維線段/量程相交測試:解決方案名稱?
- 24. 檢測Sprites是否正確?
- 25. 如何確定線是否相交簡單多邊形?
- 26. 如何找出射線是否與矩形相交?
- 27. 一條線是否與多邊形相交?
- 28. 如何檢查點是否與多邊形相交
- 29. 如何檢查Postgres中的兩個多邊形是否相交?
- 30. 檢查多邊形是否自相交谷歌地圖v3
我認爲CalcX需要返回x0 +(yval - y0)*(x1 - x0)/(y1 - y0); – 2014-02-04 23:34:59