drawLine()
変更されたJPanelのグラフィックスコンテキストを使用して、Clojure/Javaでいくつかの基本的なグラフ作成ソフトウェアを作成しました。プロット自体はうまく機能していますが、クリックしたピクセルを最も近いデータポイントに変換しようとすると、行き詰まりになりました。
線の終点を示すすべてのピクセルのリストと実際の生データの間に単純な全単射があります。必要なのは、グラフウィンドウのすべてのピクセル(たとえば、1200x600 px 2)からピクセルリスト内のピクセルへの全射であり、それから実際のデータポイントへの簡単なマッピングが得られます。
例えば
<x,y>(px) ----> <~x,~y>(pixel points) ----> <x,y>(data)
これは私が今想像している状況です:
メイングラフウィンドウでピクセルがクリックされると、MouseListenerがそのイベントをキャッチし
<x,y>
、アクションの座標を教えてくれます。その情報は、渡された値が「十分に良い」かどうかを判断する述語を返す関数に渡され、その述語でリストをフィルタリングして、最初の値を取得します。
- おそらく、述語の代わりに、ピクセルポイントのリストが渡される関数を返し、
(x index)
ポイントがの大きさでどれだけ優れているかx
、およびそのポイントが。でどこにあるかを示すタプルのリストを返しますindex
。これは、xポイントとyポイントの両方で行います。次に、それをフィルタリングして、最大xを持つものを見つけ、その1つを、ユーザーが意図したものである可能性が最も高いポイントと見なします。
- おそらく、述語の代わりに、ピクセルポイントのリストが渡される関数を返し、
この問題に対するこれらの合理的な解決策はありますか?信頼性評価(おそらくpix-ptからの距離)を含むソリューションは、プロセッサが多すぎる可能性があり、すべてのポイントをメモリに再度保持すると、メモリが少し重くなる可能性があります。述語だけを使用する他の解決策は、常に正確であるとは限らないようです。
他のグラフライブラリが示しているように、これは解決された問題ですが、これらのプログラムのいくつかのソース以外でそれに関する情報を見つけるのは困難であり、Javaの数千行を掘り下げるよりも良い方法が必要ですこれを見つけるために。
私はより良い解決策、または可能であれば私が提供したものに関する一般的な指針とアドバイスを探しています。