输入一组指向clojure函数的点

Pra*_*nav 6 input clojure data-structures

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

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

Phi*_*ter 7

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

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

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


mik*_*era 4

通常您应该从最简单的解决方案开始,因此在这种情况下,我可能会使用点列表来完成,每个点表示为二维向量,例如

(def my-polygon (list [0 0] [1 0] [1 1] [0 1]))
Run Code Online (Sandbox Code Playgroud)

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

然而,根据您将来最终想要如何使用/操作这些多边形,可以考虑一些替代方案:

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