优化这行代码:function iscol = iscollision1(Pnear,Pnew,Pvec,Imp) iscol = false; step = 30; for n = 0:step p = Pnear + n*Pvec; if unfeasible(p,Imp) iscol = true; break; end end if unfeasible(Pnew,Imp) iscol = true; end end function unfeasible = unfeasible(p,Imp) % disp('in the check!'); unfeasible = false; if (p(1) < 1 || p(2) < 1 || p(1) >= size(Imp,1) || p(2) >= size(Imp,2) || Imp(floor(p(1)),floor(p(2))) == 0) unfeasible = true; end end function iscol = iscollision2(this_p,Pnew,dist,Imp) iscol = false; Pvec = [Pnew(1) - this_p(1), Pnew(2) - this_p(2)]; Pvec = Pvec/norm(Pvec); for n = 0:dist p = this_p + n*Pvec; if unfeasible(p,Imp) iscol = true; end end end
时间: 2023-12-15 14:04:52 浏览: 97
优化代码
优化后的代码如下:
```
function iscol = iscollision1(Pnear, Pnew, Pvec, Imp)
step = 30;
for n = 0:step
p = Pnear + n*Pvec;
if unfeasible(p,Imp)
iscol = true;
return;
end
end
iscol = unfeasible(Pnew,Imp);
end
function unfeasible = unfeasible(p, Imp)
if any(p < 1) || p(1) >= size(Imp,1) || p(2) >= size(Imp,2) || Imp(floor(p(1)), floor(p(2))) == 0
unfeasible = true;
else
unfeasible = false;
end
end
function iscol = iscollision2(this_p, Pnew, dist, Imp)
Pvec = (Pnew - this_p)/dist;
for n = 0:dist
p = this_p + n*Pvec;
if unfeasible(p, Imp)
iscol = true;
return;
end
end
iscol = false;
end
```
对第一个函数 iscollision1 做了如下优化:
1. 删除了变量 iscol 的初始化,直接在循环中更新,减少了一次赋值操作。
2. 如果在循环中检测到碰撞,直接返回函数结果,没必要执行后面的代码。
对第二个函数 unfeasible 做了如下优化:
1. 删除了变量 unfeasible 的初始化,直接在条件语句中更新,减少了一次赋值操作。
2. 使用了向量化的方式判断 p 是否在空间范围内,代码更加简洁。
对第三个函数 iscollision2 做了如下优化:
1. 使用了向量化的方式计算 Pvec。
2. 如果在循环中检测到碰撞,直接返回函数结果,没必要执行后面的代码。
阅读全文