我會去了解這個通過比較你的載體,這也是平行向量的直線的斜率的成分的比例,以相同的數量從矩形的中心,其角指向向量。這會告訴你矢量是水平還是垂直。之後,您可以使用簡單的比例來找到相交點。
假設你的向量是(x,y)
,並且現在假定兩個座標都是正的。使用其中矩形的中心位於(0,0)
的座標系,斜率爲y/x
,矩形的等效數量爲h/w
。現在,如果y/x > h/w
,你的交叉點將在頂部邊緣,所以你知道它的高度是h/2。然後,您可以計算座標爲(0.5*h*x/y,0.5*h)
。如果y/x < h/w
,交點位於右邊緣,座標爲(0.5*w,0.5*w*y/x)
。
要在實踐中使用這個,你需要實際做y*w
和x*h
之間的比較,以避免零除以及避免相對昂貴的除法運算符的問題(這不是真的有很大區別)。此外,只需使用x
和y
的符號,即可找到交叉點組件的正確標誌。所以在代碼中,它看起來像這樣:
def intersect_perimeter(x, y, w, h):
if abs(y*w) > abs(x*h):
return (0.5*h*x/abs(y), 0.5*h*sign(y))
else:
return (0.5*w*sign(x), 0.5*w*y/abs(x))
(未經測試)。如果x
爲零並且y
或w
爲零,但是在這種情況下,您有零向量(問題未定義)或零寬度矩形(問題未定義),則此操作將失敗。所以我不會爲這種情況下的錯誤檢查而煩惱。
如果您的矩形以(0,0)
以外的點爲中心,則只需將表示矩形中心的位置矢量添加到該函數的結果中即可。
http://stackoverflow.com/search?q=line+intersection+rectangle – 2012-02-24 03:51:31
感謝您的鏈接,我沒有使用這些條款,它似乎像你的發現更好的結果,幾乎使我的問題變得多餘。再次感謝。 – TankorSmash 2012-02-29 20:55:53