2014-01-27 86 views
0

我想在一個圓圈(它代表我的鼠標)在WPF中實現某種捕捉功能,它應該捕捉到另一個對象(通常這將是一條線或一個矩形)。捕捉圓到矩形/行

enter image description here

有沒有辦法做這樣的與WPF功能沒有做我自己所有的計算,如果不是有一種簡單的方法(庫?),以獲得這方面的信息?

編輯:我想捕捉圓的邊界到矩形/線的邊界。

+0

是不是編程這東西是爲什麼程序員正在編程? '圖書館'很無聊。 – Sinatr

回答

1

作爲第一步,您應該找到最接近光標的矩形上的點以及兩者之間的距離:擴展矩形的邊緣,將平面劃分爲9個區域。根據光標位於的區域,搜索距離將是到角點的距離(歐幾里得距離公式)或到邊緣的距離(橫座標或縱座標的差值)。

從這個距離減去圓的半徑。這會告訴你,如果你足夠接近一個單元。

如果可以捕捉,可將光標沿當前光標位置的直線移動到最近點,直到碰到角或邊。您將需要使用線段的參數方程。

完整的討論需要一些謹慎,但只涉及簡單的數學。

類似的方法可以捕捉到線段。這裏有一個技巧:如果旋轉線段使其水平,則可以將線段視爲簡併矩形並使用相同的捕捉算法。旋轉線段和光標,應用捕捉邏輯,然後反向旋轉更新的光標。

1

這種功能只需要幾行代碼就可以複製......我懷疑你會找到一個代碼庫來爲你做。方法如下:

保留包含構成每個形狀的邊界框的4個Point的集合。然後您需要處理MouseMove事件Canvas或形狀容器。在這種情況下,您只需確定當前鼠標位置是否與任何形狀邊緣保持一定的距離......您將需要更多的工作來處理非矩形形狀來計算它們的邊緣,但校長是一樣的。

如果您檢測到附近形狀的存在,那麼您只需將最近尺寸的值更改爲附近形狀的值即可。這就是...比你想象的要容易得多。