在 Clojure 中从两点创建线段
执行此操作的最佳方法是什么?这是我到目前为止所得到的
(defn line-segment [start end]
(let [x-direction (abs (- (first end) (first start)))
y-direction (abs (- (last end) (last start)))]
(cond
(= 0 x-direction) (something ...)
(= 0 y-direction) (something ...))))
这是我的最终目标
user=> (line-segment [5 6] [5 8])
([5 6] [5 7] [5 8])
是的,没有对角线,只有 x 或 y 运动。
谢谢。
What's the best way to go about doing this? Here's what I've got so far
(defn line-segment [start end]
(let [x-direction (abs (- (first end) (first start)))
y-direction (abs (- (last end) (last start)))]
(cond
(= 0 x-direction) (something ...)
(= 0 y-direction) (something ...))))
Here's my end goal
user=> (line-segment [5 6] [5 8])
([5 6] [5 7] [5 8])
And yes, there are no diagonals, only x or y movement.
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我认为这是一个非常优雅的解决方案:
REPL 会话:
即使您的示例输出被格式化为向量,该函数也会返回一个 LazySeq。我以为这并不重要。
I think this is a pretty elegant solution:
REPL session:
This function returns a
LazySeq
even though your sample output was formatted as a vector. I figured this wasn't important.这是一个简单的解决方案,也允许对角线:
与 dbryne 的解决方案一样,这返回点的惰性序列而不是向量:我认为这是最有用的形式,假设您随后想要对线上的每个点执行某些操作依次分段。
Here's a simple solution that also allows diagonals:
As with dbryne's solution, this returns a lazy sequence of points rather than a vector: I think this is the most useful form assuming that you subsequently want to do something with each of the points on the line segment in turn.