K-d tree: Difference between revisions

Content added Content deleted
(→‎{{header|Common Lisp}}: make code organization more idiomatic, remove redefinition spamming)
Line 601: Line 601:
&aux (dims (length target)))
&aux (dims (length target)))
"process one set of data & optionally display tree"
"process one set of data & optionally display tree"
(let ((*hits* 0))
(let* ((*hits* 0)
(let* ((kdt (make-kdtree 0 data dims))
(kdt (make-kdtree 0 data dims))
(nn (nn-kdtree kdt (list) target)))
(nn (nn-kdtree kdt (list) target)))
(when render
(when render
(visit-kdtree kdt
(visit-kdtree kdt
:node-function
:node-function
(lambda (n)
(lambda (n)
(format t
(format t
"~A node: axis:~A point: ~A target:~A semi-distance-sqd:~A euclidean-distance-sqd:~A~%"
"~A node: axis:~A point: ~A target:~A semi-distance-sqd:~A euclidean-distance-sqd:~A~%"
(if (not (next-node n target))
(if (not (next-node n target))
"TERMINAL"
"TERMINAL"
"BRANCH")
"BRANCH")
(first n)
(first n)
(second n)
(second n)
target
target
(distance n target :semi t)
(distance n target :semi t)
(distance n target)))))
(distance n target)))))
(format t "~%NN to ~A is ~A, distance ~A [tree has ~A nodes, ~A were visited.]~%"
(format t "~%NN to ~A is ~A, distance ~A [tree has ~A nodes, ~A were visited.]~%"
target
target
(second nn)
(second nn)
(sqrt (distance nn target))
(sqrt (distance nn target))
(count-nodes kdt)
(count-nodes kdt)
*hits*))))
*hits*)))


(defun main ()
(defun main ()