ich clojure Skript neu bin und ich versuche, die folgende Funktion in clojurescriptFunktion Testwert in einem Bereich von Werten und Rückgabewert
function getLengthAtPoint(pt){
var i = 0;
while(i < p.getTotalLength())
{
var xy = p.getPointAtLength(i);
// console.log(i, xy);
if(Math.round(xy.y) == pt[1] && Math.round(xy.x) == pt[0])
{
return i;
}
i++;
}
return 0;
}
ich zu decken haben die folgende Logik
(defn get-length-at-point
[p pt]
(doseq [
i (range (.getTotalLength p))
:let [xy (.getPointAtLength p i)]
:when (and (= (round js/Math (first xy)) (first pt)) (= (round js/Math (last xy)) (last pt)))]
i)
0)
Aber ich denke, ich vielleicht hier falsch, weil: Wann wird nicht i
wird es zurückgeben?
aktualisieren
mit diesem
(defn get-length-at-point
[pt {p :path}]
(loop [i 0]
(let [point (.getPointAtLength p i)]
(cond
(and (= (.round js/Math (.-x point)) (.round js/Math (:x pt)))
(= (.round js/Math (.-y point)) (.round js/Math (:y pt)))) i
(>= i (.getTotalLength p)) 0
:else (recur (inc i))
))))
Kam Wenn jemand weiß, einen einfacheren Weg
Ihr Javascript bezieht sich auf 'p' und' pt', obwohl nur 'pt' ein Parameter ist. – Thumbnail
yeah Ich füge einige zusätzliche Sachen in die Clojure-Version ein – Kendall
Funktioniert das Javascript 'getLengthAtPoint', wie oben beschrieben, tatsächlich? Da der Körper der Funktion auf einer undefinierten Variablen "p" operiert, scheint dies unwahrscheinlich. – Thumbnail