2011-02-11 37 views

回答

1

如果你搜索「多邊形算法點」,你會發現一堆。對於矩形,我想最簡單的方法是將矩形分成兩個三角形並檢查測試點的barycentric coordinates。下面是一個未經考驗的現成的,袖口嘗試它編寫了起來:

boolean pointInTriangle(int x, int y, int x1, int y1, int x2, int y2, int x3, int y3) { 
    int denom = (y2-y3)*(x1-x3) + (x3-x2)*(y1-y3); 
    if(denom==0) return false; // collinear 

    int num1 = (y2-y3)*(x-x3) + (x3-x2)*(y-y3); 
    if((denom < 0 && num1 > 0) || (denom > 0 && num1 < 0)) return false; 

    int num2 = (y3-y1)*(x-x3) + (x1-x3)*(y-y3); 
    if((denom < 0 && num2 > 0) || (denom > 0 && num2 < 0)) return false; 

    int num3 = denom - num1 - num2; 
    if((denom < 0 && num3 > 0) || (denom > 0 && num3 < 0)) return false; 

    return true; 
} 

現在,你只需要循環在你的矩形,檢查點是否在任何兩個三角形從而彌補了矩形的。