解释这行代码: for i = i:size(T.v,2) dist = sqrt((Pnew(1) - T.v(i).x)^2 + (Pnew(2) - T.v(i).y)^2); if dist <= r %处理在给定园范围里面的 this_cost = dist + T.v(i).cost; if this_cost < tmp_cost %判断是否有障碍物 this_p = [T.v(i).x,T.v(i).y]; if iscollision2(this_p,Pnew,dist,Imp) continue; end tmp_cost = this_cost; minInd = i; end end end
时间: 2024-02-15 21:28:09 浏览: 130
pdfjs-2.16.105-dist.zip
这段代码的作用是查找树 `T` 中与新加入节点 `Pnew` 距离小于等于阈值 `r` 的节点,并更新新节点的父节点和代价。
具体地,它使用一个 `for` 循环遍历树 `T` 中与新节点距离小于等于阈值 `r` 的节点。对于每个满足条件的节点,它计算从新节点到该节点的距离,并将其存储在变量 `dist` 中。然后,它计算从起点到新节点再到该节点的代价 `this_cost`,即从起点到新节点的代价加上从新节点到该节点的距离,再加上该节点到根节点的代价。如果这个代价比新节点当前的代价更小,那么就更新新节点的代价和父节点。需要注意的是,这里的代价是指从根节点到当前节点的路径代价,而不是从起点到当前节点的路径代价。因此,它需要计算从新节点到该节点的距离,并加上该节点到根节点的代价,才能得到从起点到该节点的路径代价。
如果更新后的代价小于新节点的当前代价,则说明通过该节点到达新节点的路径更优,可以将新节点的父节点更新为该节点,并更新新节点的代价。
在更新之前,它还会检查从该节点到新节点的路径上是否存在障碍物。如果存在碰撞,则跳过该节点,不进行更新。
阅读全文