我已經在Clojure/Java中使用drawLine()
在修改的JPanel的圖形上下文中編寫了一些基本的圖形軟件。繪圖本身很好,但我試圖將點擊的像素轉換爲最近的數據點時陷入了僵局。將像素映射到數據
我有一個簡單的雙射線之間的所有像素的列表標記我的線的終點和我的實際原始數據。我需要的是我的圖形窗口中的所有像素(比如說,1200x600像素)對像素列表中的像素的投影,給我一個從那個到我的實際數據點的簡單映射。
例如
<x,y>(px) ----> <~x,~y>(pixel points) ----> <x,y>(data)
這是我現在想象它的情況:
像素點擊主圖形窗口和的MouseListener捕獲的事件,可以讓我的的
<x,y>
座標行動。該信息被傳遞給一個函數,該函數返回一個謂詞,該謂詞決定傳遞給它的值是否「足夠好」,並使用該pred過濾列表,並獲取第一個值。
- 可能,而不是一個謂詞,它返回它經過的像素點的列表的功能,並返回元組
(x index)
的列表,它表示點有多好與x
幅度,並在該點與index
。我會用x點和y點來做到這一點。然後,我通過篩選並找到最大x的那個,並將其作爲最有可能成爲用戶意義的那一點。
- 可能,而不是一個謂詞,它返回它經過的像素點的列表的功能,並返回元組
對於這個問題,這些合理的解決辦法?看來,解決方案涉及信心評級(可能距pix-pt的距離)可能太重,而且如果我將所有的點再次放在內存中,則會佔用很多內存。另一個解決方案只使用謂詞,似乎並不總是準確的。
這是一個解決問題,因爲其它的繪圖庫的顯示,但它很難找到關於它的其他信息相比,在這些程序的來源,我們有了一個更好的辦法,然後挖通成千上萬的Java線路發現了這一點。
我正在尋找更好的解決方案,或只是一般指針和我提供的建議,如果可能的話。
的JFreeChart會一直補充說,我不想處理了一層複雜性,但大多是太慢了。我每秒重繪數千個點。歐幾里德距離是有意義的;它本質上就是我現在正在玩弄的東西,但是將它改造成方法sqrt(sq xdiff)(sq ydiff)是很有幫助的。謝謝! – Isaac 2010-08-11 14:21:31
@Isaac:哇。所以你實際上每秒重複繪製所有這些點數?如果你還沒有使用加速表面,可能值得考慮。 另外:如果你正在尋找千分之一的點,並且想要一個交互式響應,那麼像BSP樹這樣的空間優化將成爲必然。寫作也會很糟糕。儘管如此,BSP確實並行。 在深入研究解決方案時,請保持更新。我對你最終結果感興趣。 – 2010-08-11 14:44:23
感謝您的提示:加速表面;當我在加速繪圖時,我可能會看一看。現在,這不是一個太大的問題。我通常不會每秒重繪數千點以上,這並不是很難處理。至於BSP,從維基百科的文章來看,這聽起來並不像他們特別適用:或許我錯過了什麼? – Isaac 2010-08-11 20:03:58