gpt4 book ai didi

clojure - 获取 x,y 点列表的边界

转载 作者:行者123 更新时间:2023-12-04 17:57:03 25 4
gpt4 key购买 nike

我有一个存储为向量向量的 x,y 点列表,我想找出边界。

例如,鉴于此:

[[0 0] [20 30] [-50 -70] [200 300]]

结果将是:
{:x -50, :y -70, :x2 200, :y2 300}

这是我到目前为止所拥有的。它给出了想要的结果,但对我来说似乎很冗长而且不是很笨拙。
(defn get-stroke-bounds [vector-of-points]
(reduce (fn [m [x y]]
{:x (min (:x m Integer/MAX_VALUE) x)
:y (min (:y m Integer/MAX_VALUE) y)
:x2 (max (:x2 m Integer/MIN_VALUE) x)
:y2 (max (:y2 m Integer/MIN_VALUE) y)})
{}
(vector-of-points)))

关于如何改进它的任何想法?谢谢!

最佳答案

你的解决方案已经很不错了!这是相当惯用的,并且在算法上最优的点数上也是 O(n)(实际上比进行排序的方法更好)。

但这里有一种替代方法,您可能会觉得很有趣……创建主要是因为我是高阶函数的忠实粉丝:-)

(defn get-stroke-bounds [stroke]
(zipmap
[:x :y :x2 :y2]
(map
(fn [[getter reducer]]
(reduce
reducer
(map getter stroke)))
[
[first min]
[second min]
[first max]
[second max]])))

关于clojure - 获取 x,y 点列表的边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6601253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com