Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 需要帮助翻译foo+=(bar-foo)*qux;结束_Java_Clojure_Processing - Fatal编程技术网

Java 需要帮助翻译foo+=(bar-foo)*qux;结束

Java 需要帮助翻译foo+=(bar-foo)*qux;结束,java,clojure,processing,Java,Clojure,Processing,我在Java/Processing中有以下代码 posX += (targetX - posX) * easing; posY += (targetY - posY) * easing; 但我正在努力将其翻译成Clojure,任何帮助都将不胜感激 免责声明:我正在学习clojure,这个解决方案很可能不是惯用的 ; Let *tx*, *ty* be your target coordinate ; Let sx, sy be your starting coordinat

我在Java/Processing中有以下代码

  posX += (targetX - posX) * easing;
  posY += (targetY - posY) * easing;

但我正在努力将其翻译成Clojure,任何帮助都将不胜感激

免责声明:我正在学习clojure,这个解决方案很可能不是惯用的

;    Let *tx*, *ty* be your target coordinate
;    Let sx, sy be your starting coordinate
;    Let *eg* be your easing
    (def ^:dynamic *eg* 0.05)
    (def ^:dynamic *tx* 100)
    (def ^:dynamic *ty* 100)
    (defn next-position [[sx sy]] [(+ sx (* (- *tx* sx) *eg*)) (+ sy (* (- *ty* sy) *eg*))])
    (defn positions [[x y]] (iterate next-position [x y]))

; To get the next position
(next-position [5 6])

; To get the next 100 positions
(take 100 (positions [5 6]))

免责声明:我正在学习clojure,这个解决方案很可能不是惯用的

;    Let *tx*, *ty* be your target coordinate
;    Let sx, sy be your starting coordinate
;    Let *eg* be your easing
    (def ^:dynamic *eg* 0.05)
    (def ^:dynamic *tx* 100)
    (def ^:dynamic *ty* 100)
    (defn next-position [[sx sy]] [(+ sx (* (- *tx* sx) *eg*)) (+ sy (* (- *ty* sy) *eg*))])
    (defn positions [[x y]] (iterate next-position [x y]))

; To get the next position
(next-position [5 6])

; To get the next 100 positions
(take 100 (positions [5 6]))
什么是波西,波西

它们可以是原子

(def posX (atom 0))
(def posY (atom 0))
如果你想改变posX,你可以写一个函数

(defn update-posx 
  [targetX easing] 
  (swap! 
    posX 
    #(+ % (* (- targetX %) easing))))
更新类似于

(update-posx 20 30)
什么是波西,波西

它们可以是原子

(def posX (atom 0))
(def posY (atom 0))
如果你想改变posX,你可以写一个函数

(defn update-posx 
  [targetX easing] 
  (swap! 
    posX 
    #(+ % (* (- targetX %) easing))))
更新类似于

(update-posx 20 30)

根据您的代码片段,我猜您基本上是在使用另一组坐标和缓和因子来转换一组坐标

我将定义一个函数,以以下方式封装转换:

(defn ease-coord [factor src tgt]
  (+ src (* (- tgt src) factor)))

(defn ease [factor src tgt]
  (map (partial ease-coord factor) src tgt))

(ease 0.1 [1 2] [3 10])
;=> (1.2 2.8)
(ease 0.1 [1 2 3] [3 10 5])
;=> (1.2 2.8 3.2)

请注意,ease函数实际上适用于具有任意数量坐标的向量和列表。

根据您的代码片段,我猜您基本上是在使用另一组坐标和缓和因子变换一组坐标

我将定义一个函数,以以下方式封装转换:

(defn ease-coord [factor src tgt]
  (+ src (* (- tgt src) factor)))

(defn ease [factor src tgt]
  (map (partial ease-coord factor) src tgt))

(ease 0.1 [1 2] [3 10])
;=> (1.2 2.8)
(ease 0.1 [1 2 3] [3 10 5])
;=> (1.2 2.8 3.2)
请注意,ease函数实际上适用于具有任意坐标数的向量和列表。

如果您打算大量使用向量数学,我建议使用。它为所有常用的数学函数+、-、*等提供向量覆盖,并允许您透明地使用表示为常规Clojure向量的数学向量

下面是它可能的样子:

(use 'clojure.core.matrix.operators)

(defn lerp [start end factor]
     (+ start (* (- end start) factor)))

(lerp [1 2] [10 10] 0.1)
=> [1.9 2.8]
如果您关心性能,您也可以使用实现,它通过专门的x,y坐标快速矢量2类型增强了core.matrix。

如果您打算大量使用矢量数学,我建议使用。它为所有常用的数学函数+、-、*等提供向量覆盖,并允许您透明地使用表示为常规Clojure向量的数学向量

下面是它可能的样子:

(use 'clojure.core.matrix.operators)

(defn lerp [start end factor]
     (+ start (* (- end start) factor)))

(lerp [1 2] [10 10] 0.1)
=> [1.9 2.8]

如果您关心性能,您也可以使用实现,它通过专门的x,y坐标快速矢量2类型增强了core.matrix。

很难将几行命令式Java代码转换为无状态的函数代码。一个更好的方法是退一步,看看你试图解决的问题或你试图实现的算法,问问你自己,你将如何以一种函数式的方式去做。逐行将Java转录到Clojure很少能产生好的结果。要将几行命令式Java代码翻译成无状态的函数式代码是非常困难的。一个更好的方法是退一步,看看你试图解决的问题或你试图实现的算法,问问你自己,你将如何以一种函数式的方式去做。逐行将Java转录到Clojure很少产生好的结果。