我正在Clojure中编写一个算法,该算法需要一组代表多边形的点。另一个输入是一个点,输出需要是点是否位于多边形内部。向clojure函数输入一组点
我的问题是如何向功能输入一组点? clojure中的数据结构最合适 - 集合,向量,列表等?
我正在Clojure中编写一个算法,该算法需要一组代表多边形的点。另一个输入是一个点,输出需要是点是否位于多边形内部。向clojure函数输入一组点
我的问题是如何向功能输入一组点? clojure中的数据结构最合适 - 集合,向量,列表等?
通常你应该从最简单的可能解决方案开始,所以在这种情况下,我可能会用一系列点来做,每个点表示为一个二维矢量,例如,
(def my-polygon (list [0 0] [1 0] [1 1] [0 1]))
这应该是你的应用程序的罚款。
但是这取决于你最终想要如何使用/在未来maniplulate这些多边形有一些替代方案来考虑:
推测点的顺序很重要,这样形状ABCD与形状ABDC不一样吗?
在这种情况下,您需要某种保存顺序的数据结构。这意味着列表或向量是可以接受的,但是一个集合不是。
但是你也可以编写你的函数来获取seqable的任何东西 - 这样如果你以后想要从向量更改为list或者反过来,你不必改变你的函数。编程到一个接口,而不是一个实现。
+1对于seqable建议特别是! – mikera 2011-03-02 15:19:20
感谢您的代码片段。但是,如何修改它以返回向量输入列表的第一个元素? (我是clojure语法的新手) – Pranav 2011-03-02 15:35:29
那么你可以做“(第一个我的多边形)”来获得[0 0]例如 - 你的意思是?和“(休息我的多边形)”会给你的剩余点列表,假设你想写一些形式的函数迭代或递归这些。 – mikera 2011-03-02 15:41:46
基本上我的问题是 - 为什么下面的代码会给出错误 - (def in-poly [arg] (first arg)) – Pranav 2011-03-02 15:49:55