Math Clojure中的基本几何

Math Clojure中的基本几何,math,clojure,geometry,Math,Clojure,Geometry,我正在寻找Clojure库来完成一些基本的几何图形,例如: 根据直线的起点和终点坐标计算直线的坡度 给定一条具有已知斜率的直线和一个x值,计算y值(并计算给定y的x) 考虑到方程的数学定义,我可以很容易地写出这些,但如果有一个像样的库已经做到了这一点,那么这样做似乎是一件很遗憾的事情 请注意,我不需要以图形等方式绘制东西,因此引入大量图形依赖关系的库并不受欢迎。我认为在这种情况下,由于函数非常小,因此编写函数比引入依赖关系更简单 (defprotocol Line (gradient [

我正在寻找Clojure库来完成一些基本的几何图形,例如:

  • 根据直线的起点和终点坐标计算直线的坡度
  • 给定一条具有已知斜率的直线和一个x值,计算y值(并计算给定y的x)
考虑到方程的数学定义,我可以很容易地写出这些,但如果有一个像样的库已经做到了这一点,那么这样做似乎是一件很遗憾的事情


请注意,我不需要以图形等方式绘制东西,因此引入大量图形依赖关系的库并不受欢迎。

我认为在这种情况下,由于函数非常小,因此编写函数比引入依赖关系更简单

(defprotocol Line
  (gradient [this] "The gradient of a line")
  (intercept [this] "The intercept of a line on the y axis")
  (f [this] "The line's function f(x) - takes x, returns y")
  (f-inv [this] "The inverse function f-inv(x) - takes y, return x"))

(defn line
  "Make a Line from a gradient and an intercept"   
  [gradient intercept]
  (reify Line
     (gradient [_] gradient)
     (intercept [_] intercept)
     (f [_] (fn [x] (+ (* gradient x) intercept)))
     (f-inv [_] (fn [y] (/ (- y intercept) gradient)))))

(defn points->line 
  "Make a Line given two (different) points on the line"
  [[x1 y1] [x2 y2]]
  (let [gradient (/ (- y2 y1)
                    (- x2 x1))
        intercept (- y1 (* gradient x1))]
  (line gradient intercept)))
例如:

(def l (points->line [1 1] [4 2]))
(gradient l) ;=> 1/3
(intercept l) ;=> 2/3
((f l) 4) ;=> 2
((f-inv l) 2) ;=> 4

如果你在或上找不到它,那么它可能不存在。为什么不创建一个呢?看起来我可能需要自己来运行它,因为我还没有找到任何东西。在上有一些代码,尽管我没有时间来看看这是否是您需要的。如果是,请用它回答你自己的问题。HTHsligeom的目标似乎是3D图形。里面有一堆矩阵的东西。这并不是我这个项目所需要的,但总的来说它看起来非常有用。谢谢这里有很多矩阵的东西,因为矩阵是一种表达几何变换(旋转、缩放、剪切、翻转等)的便捷方式。非常好的东西,谢谢!