Changeset 27035 in project


Ignore:
Timestamp:
07/10/12 08:34:51 (9 years ago)
Author:
Ivan Raikov
Message:

spatial-tree: bug fxes in kd-tree-max and kd-tree-min

File:
1 edited

Legend:

Unmodified
Added
Removed
  • release/4/spatial-trees/trunk/kd-tree.scm

    r27033 r27035  
    3737          (only foreign foreign-lambda)
    3838          (prefix cis cis:))
    39 
    40 
    41 
    42 
    43 
    4439
    4540
     
    304299
    305300  (define (kd-tree-max t)
    306     (cases kd-tree t
    307            (KdLeaf (ii pp vv axis) (cis:get-max ii))
    308            (KdNode (l x i r axis ci) (cis:get-max ci))))
     301
     302    (cases kd-tree t
     303           (KdLeaf (ii pp vv axis)     
     304                   (cis:get-max ii))
     305           (KdNode (l x i r axis ci)
     306                   (cis:get-max ci))))
    309307
    310308
     
    758756                                            (coord axis p))
    759757
    760                                          (let* ((l1 (tree-remove l p-kill))
    761                                                 (r1 (or (and l1 r) (tree-remove r p-kill))))
     758                                         (let* ((l1   (tree-remove l p-kill))
     759                                                (r1   (or (and l1 r) (tree-remove r p-kill)))
     760                                                (ll   (or l1 l))
     761                                                (rr   (or r1 r)))
    762762
    763763                                           (and (or l1 r1)
    764                                                 (KdNode (or l1 l) p i (or r1 r) axis
     764                                                (let ((min1 (cond ((and (kd-tree-empty? ll)
     765                                                                        (kd-tree-empty? rr))
     766                                                                   (cis:singleton i))
     767                                                                  ((kd-tree-empty? ll)
     768                                                                   (kd-tree-min rr))
     769                                                                  (else
     770                                                                   (kd-tree-min ll))))
     771                                                      (max1 (cond ((and (kd-tree-empty? ll)
     772                                                                        (kd-tree-empty? rr))
     773                                                                   (cis:empty))
     774                                                                  ((kd-tree-empty? rr)
     775                                                                   (kd-tree-max ll))
     776                                                                  (else
     777                                                                   (kd-tree-max rr))))
     778                                                      )
     779
     780                                                (KdNode ll p i rr axis
    765781                                                        (cis:add (if (integer? i) i (car i))
    766                                                                  (cis:interval (kd-tree-min (or l1 l))
    767                                                                                (kd-tree-max (or r1 r)))))
    768                                                 ))
     782                                                                 (cis:interval min1 max1)))
     783                                                )))
    769784
    770785                                         (let* ((r1 (tree-remove r p-kill))
    771                                                 (l1 (or (and r1 l) (tree-remove l p-kill))))
     786                                                (l1 (or (and r1 l) (tree-remove l p-kill)))
     787                                                (ll   (or l1 l))
     788                                                (rr   (or r1 r))
     789                                                )
    772790
    773791                                           (and (or r1 l1)
    774                                                 (KdNode (or l1 l) p i (or r1 r) axis
     792                                                (let ((min1 (cond ((and (kd-tree-empty? ll)
     793                                                                        (kd-tree-empty? rr))
     794                                                                   (cis:singleton i))
     795                                                                  ((kd-tree-empty? ll)
     796                                                                   (kd-tree-min rr))
     797                                                                  (else
     798                                                                   (kd-tree-min ll))))
     799                                                      (max1 (cond ((and (kd-tree-empty? ll)
     800                                                                        (kd-tree-empty? rr))
     801                                                                   (cis:empty))
     802                                                                  ((kd-tree-empty? rr)
     803                                                                   (kd-tree-max ll))
     804                                                                  (else
     805                                                                   (kd-tree-max rr))))
     806                                                      )
     807                                                (KdNode ll p i rr axis
    775808                                                        (cis:add (if (integer? i) i (car i))
    776                                                                  (cis:interval (kd-tree-min (or l1 l))
    777                                                                                (kd-tree-max (or r1 r)))))
    778                                                 ))
     809                                                                 (cis:interval min1 max1)))
     810                                                )))
    779811                                     )))
    780812                         ))
Note: See TracChangeset for help on using the changeset viewer.