我正在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