输入一组指向clojure函数的点

时间:2011-03-02 14:35:21

标签: data-structures input clojure

我在Clojure中编写了一个算法,它采用了一组代表多边形的点。另一个输入是一个点,输出需要是该点是否位于多边形内部。

我的问题是如何输入函数的点集? clojure中哪种数据结构最合适 - 集合,向量,列表等?

2 个答案:

答案 0 :(得分:7)

据推测,点的顺序很重要,因此形状ABCD与ABDC的形状不一样?

在这种情况下,您需要某种保留顺序的数据结构。这意味着列表或向量是可接受的,但是不是。

但是你也可以编写你的函数来获取任何可选的东西 - 所以如果你以后想要从vector更改为list,反之亦然,那么你不必更改你的函数。编程到接口,而不是实现。

答案 1 :(得分:4)

通常你应该从最简单的解决方案开始,所以在这种情况下我可能会用一个点列表来做,每个点都表示为一个二维向量,例如

(def my-polygon (list [0 0] [1 0] [1 1] [0 1]))

这应该适用于您的应用程序。

但是,根据您最终希望如何使用/操纵这些多边形的方法,有一些替代方案需要考虑:

  • 如果您想要与Java代码进行互操作(例如,使用Swing / Java2D在框架中绘制多边形),您可能希望使用适当Java类的实例(例如 java.awt.geom.Point2D的子类之一)作为个人观点。这将为您提供较少惯用的Clojure代码,但会为您提供更好的Java interop
  • 您可能希望使用向量而不是列表 - 特别是如果您要使用大型多边形并将索引访问的不同算法应用于个人点