2014-04-30 92 views
0

我需要一種方法來檢查用戶是否單擊了貝塞爾樣條曲線。我目前的做法是將其拆分成段,然後檢查點的距離是否足夠接近這些段之一(在數學上的點到段距離法方面就足夠近了)。但這種方法也有缺點:如何選擇Bezier樣條曲線?

Bezier selection

正如你看到的,由點紅點標記將不會被視爲積極的,但他們應該是。當然,我可以增加細分市場的數量,但實際上這會使解決方案變得更糟,因爲活躍地區之間的差距會更大。

如何可靠地檢查用戶是否點擊了Bezier樣條曲線附近的區域?

請注意,我把它發佈在StackOverflow而不是它的數學對應物上,因爲我實際上需要比數學解決方案更可靠的啓發式算法(後者大多數情況下會慢到用於我的程序中,這些檢查必須完成實時,在鼠標移動過程中)。

+0

怎麼樣指示由曲線形狀的間隙,並設置附加段僅填補空白? – DJmRek

+0

順便說一句,你如何得到簡化的紅線的點? – DJmRek

+0

物理書呆子在這裏變成了c#程序員,我被Bezier樣條所吸引。 我認爲這取決於你對貝塞爾樣條曲線的定義?你想知道嗎?用戶想要點擊的三行中的哪一行?或者你更關心他拉它還是什麼?也許你可以做的距離不是從紅色的部分,而是從曲線?我同意在紅點區域添加填充不會太困難,但我有點不清楚如何定義它。 – JPK

回答

2

如何在紅點和線段交叉點之間添加點 - 點距離計算? 由於您在點到點距離計算中使用的距離相同,因此應該填補空白並更好地工作。

enter image description here

2

這應該是一個評論,但我還沒有被允許發表評論,所以我發佈它作爲答案。

您是否嘗試過使用貝塞爾曲線的控制點多邊形而不是貝塞爾曲線本身進行測量?貝塞爾曲線位於其控制點的凸包內。如果你的貝塞爾曲線彼此不太靠近,那麼檢查用戶是否點擊了內部(或靠近)控制點的外殼就足夠了。

+0

Upvote的前綴,我一直在那裏,張貼相同的東西。感謝關心網站規則。 – JPK

+0

在我的情況下,這只是一個貝塞爾樣條曲線。雖然我不知道,樣條線位於其控制點的凸包內(+1),但這樣的多邊形可能覆蓋太大的區域(就用戶體驗而言)。我會記住這一點,但如果我目前的算法變得太複雜並且需要花費太多時間來實時評估。 – Spook