我在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 的那个,并将那个作为最有可能是用户想要的那个点。
- 可能,它不是一个谓词,而是返回一个函数,该函数传递像素点列表,并返回一个元组列表,该列表
这些是解决这个问题的合理方法吗?似乎涉及置信度等级(可能与 pix-pt 的距离)的解决方案可能处理器过于繁重,并且如果我再次将所有点都保存在内存中,则内存会有点重。仅使用谓词的另一种解决方案似乎并不总是准确的。
这是一个已解决的问题,正如其他图形库所显示的那样,但是除了在其中一些程序的源代码中之外,很难找到有关它的信息,并且必须有更好的方法来挖掘数千行 Java找出来。
如果可能的话,我正在寻找更好的解决方案,或者只是对我提供的解决方案的一般指示和建议。