FIESTA个人理解 三 (insert delete)

这段代码展示了在ESDFMap数据结构中如何删除和插入障碍物体素。DeleteFromList函数通过调整前后连接,将idx从link障碍物的双向链表中移除。InsertIntoList函数则将idx插入到link障碍物的链表头部。这两个函数对于动态维护障碍物列表至关重要。
摘要由CSDN通过智能技术生成
Delete

void fiesta::ESDFMap::DeleteFromList(int link, int idx) {

  if (prev_[idx] != undefined_) //把idx前后连上,就无法通过link障碍物索引到idx,等价于把idx从link障碍物中删除!!!

    next_[prev_[idx]] = next_[idx]; //index->prev->next = index->next (因为数组形式,和指针顺序相反,理解一下)

  else

    head_[link] = next_[idx]; //如果idx是第一个,那么把head和idx下一个体素连上,idx索引被删除,不影响link障碍物的DLL

  if (next_[idx] != undefined_) //如果next[idx]不存在,next_[prev_[idx]]= next[idx] = undefined,不用else讨论

    prev_[next_[idx]] = prev_[idx]; //index->next->prev = index->prev (prev[next] = next->prev)

  //所有if结束后,释放idx的前后指向,等待通过insertintolist重新复制

  prev_[idx] = next_[idx] = undefined_; //free(index)

}





Insert

//将idx连接到link障碍物上

void fiesta::ESDFMap::InsertIntoList(int link, int idx) { //输入link是总网格大小 idx是当前update中弹出的体素id

  if (head_[link] == undefined_) //link障碍物没有连接体素

    head_[link] = idx; //第一个head连接idx

  else {

    prev_[head_[link]] = idx;  //link->prev = index

    next_[idx] = head_[link];  //index->next = link  idx放到head[link]前面

    head_[link] = idx;         //将head[link]指向idx,说明插入是在link头部·插入,之前的体素都往内部挤

  }

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值