优化这行代码: %step5.父节点重选择,在给定半径里面选择父节dian 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,Img) continue; end tmp_cost = this_cost; minInd = i; end end end
时间: 2024-02-15 11:27:29 浏览: 149
同样可以使用向量化运算,将循环改为矩阵运算:
dis = sqrt((Pnew(1) - [T.v(:).x]').^2 + (Pnew(2) - [T.v(:).y]').^2);
valid_ind = find(dis <= r);
for i = valid_ind
this_cost = dis(i) + T.v(i).cost;
if this_cost < tmp_cost
this_p = [T.v(i).x,T.v(i).y];
if iscollision2(this_p,Pnew,dis(i),Img)
continue;
end
tmp_cost = this_cost;
minInd = i;
end
end
这样可以使代码更加简洁高效。
相关问题
优化这行代码:%开始主循环 for iter = 1:MaxIter %step1.生成随机点 n = rand(); Prand = n < 0.5 ? [unifrnd(0,x_l),unifrnd(0,y_l)] : goal; end %step2.遍历树找到最近点 minDis = sqrt((Prand(1) - T.v(1).x)^2 + (Prand(2) - T.v(1).y)^2); minInd = 1; dis = sqrt((Prand(1) - [T.v(:).x]').^2 + (Prand(2) - [T.v(:).y]').^2); [minDis, minInd] = min(dis); end end %step3.扩展得到新节点 Pnew = [T.v(minInd).x,T.v(minInd).y] + step * ([Prand(1),Prand(2)] - [T.v(minInd).x,T.v(minInd).y]) / norm([Prand(1),Prand(2)] - [T.v(minInd).x,T.v(minInd).y]); tmp_cost = T.v(minInd).cost + step; % disp('befor check!'); %step4.检查是否碰撞 continue_flag = iscollision1(Pnear,Pnew,Pvec,Img); continue_flag = continue_flag ? continue : []; %step5.父节点重选择,在给定半径里面选择父节dian for i = i:size(T.v,2) dis = sqrt((Pnew(1) - [T.v(:).x]').^2 + (Pnew(2) - [T.v(:).y]').^2); valid_ind = find(dis <= r); for i = valid_ind this_cost = dis(i) + T.v(i).cost; if this_cost < tmp_cost this_p = [T.v(i).x,T.v(i).y]; if iscollision2(this_p,Pnew,dis(i),Img) continue; end tmp_cost = this_cost; minInd = i; end end end %step6.将Pnew插入到树中 T.v(end+1) = struct('x',Pnew(1),'y',Pnew(2),'xPre',T.v(minInd).x,'yPre',T.v(minInd).y,'cost',tmp_cost,'indPre',minInd); %画出生长出的树枝 plot([Pnew(2), T.v(minInd).y],[Pnew(1),T.v(minInd).x],'b','LineWidth',2); pause(0.01) %step7.重连接,以Pnew为父节点 for i = i:size(T.v,2)-1 dis = sqrt((Pnew(1) - [T.v(:).x]').^2 + (Pnew(2) - [T.v(:).y]').^2); valid_ind = find(dis < r & (1:length(T.v) ~= minInd)); for i = valid_ind this_cost = dis(i) + tmp_cost; if this_cost < T.v(i).cost this_p = [T.v(i).x,T.v(i).y]; if iscollision2(this_p,Pnew,dis(i),Img) continue; end T.v(i).cost = this_cost; T.v(i).xPre = Pnew(1); T.v(i).yPre = Pnew(2); T.v(i).indPre = k; end end end %step8.检查是否到达目标点附近 dis2goal = sqrt((Pnew(1) - goal(1))^2 + (Pnew(2) - goal(2))^2); flag = dis2goal < threshold; k = flag*(size(T.v,2) + 1); T.v(k).x = flaggoal(1); T.v(k).y = flaggoal(2); T.v(k).xPre = flagPnew(1); T.v(k).yPre = flagPnew(2); T.v(k).cost = flag*(T.v(k-1).cost + dis2goal); T.v(k).indPre = flag*(k - 1); if flag disp('find path!'); break; end
这段代码的主要问题在于有重复的循环变量名,导致后面的循环会覆盖前面的循环变量。建议将内部循环的变量名修改为其他名称,避免冲突。
另外,可以考虑使用向量化的方式来优化代码,减少循环次数,提高运行效率。例如,可以将一些循环中的操作改为矩阵运算或者向量化函数。
还有一些小细节可以优化,例如可以将一些常用的计算结果保存下来,避免重复计算,提高效率。
最后,建议在代码中加入注释,以方便理解和维护。
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.dian.dao.StudentMapper.selectStudent
BindingException是MyBatis框架中的异常,通常表示绑定错误或配置错误。根据您提供的错误信息,是因为找不到名为"com.dian.dao.StudentMapper.selectStudent"的SQL语句。
要解决这个问题,您可以按照以下步骤进行操作:
1. 确保在MyBatis的配置文件中正确配置了StudentMapper接口的映射文件,且文件路径和名称与代码中的一致。可以检查是否存在该文件,并确保文件中包含了selectStudent的SQL语句。
2. 检查StudentMapper接口中是否定义了名为selectStudent的方法,并且方法与映射文件中配置的id一致。确保方法上使用了@Select注解或在映射文件中正确配置了该SQL语句。
3. 如果使用注解方式配置SQL语句,请确保在MyBatis的配置文件中开启了注解扫描功能。可以在配置文件中添加以下配置:
`<mybatis-config>`
` <settings>`
` <setting name="mapUnderscoreToCamelCase" value="true"/>`
` <setting name="useGeneratedKeys" value="true"/>`
` <setting name="defaultExecutorType" value="REUSE"/>`
` <setting name="lazyLoadingEnabled" value="true"/>`
` <setting name="aggressiveLazyLoading" value="false"/>`
` <setting name="cacheEnabled" value="true"/>`
` <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>`
` <setting name="defaultStatementTimeout" value="25000"/>`
` <setting name="defaultFetchSize" value="100"/>`
` <setting name="safeRowBoundsEnabled" value="false"/>`
` <setting name="safeResultHandlerEnabled" value="true"/>`
` <setting name="mapUnderscoreToCamelCase" value="false"/>`
` <setting name="localCacheScope" value="SESSION"/>`
` <setting name="jdbcTypeForNull" value="NULL"/>`
` </settings>`
` <typeAliases>`
` <package name="com.dian.dao"/>`
` </typeAliases>`
` <mappers>`
` <mapper resource="com/dian/dao/StudentMapper.xml"/>`
` </mappers>`
`</mybatis-config>`
如果您仍然无法解决问题,请提供更多相关的代码和配置信息,以便我可以更准确地帮助您。
阅读全文