You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Processing寻路算法调用golinego函数时程序冻结无响应问题求助

问题根因

你遇到的程序无响应冻结是golinego函数内的while循环触发死循环导致的,具体触发逻辑如下:

  • 当用户绘制的遮挡完全阻断从起点(30,30)到终点(470,470)的斜向路径时,你的寻路逻辑会让坐标(i,j)进入往复摆动的状态,永远满足dist(i,j,470,470) > 10的循环条件,程序会一直卡在while循环中无法执行后续逻辑。
  • 具体的死循环触发流程:
    1. 当探测到pixelss[i+1][j+1] == 1(右下方是障碍物)时,不会执行右下角移动的逻辑
    2. 此时如果当前坐标pixelss[i][j]也被标记为障碍物,会执行i-=1; j-=1退回上一步坐标
    3. 下一轮循环又会再次尝试往右下角走,再次碰到障碍物又退回,循环往复永远不会到达终点。
修复方案
  1. 先增加循环次数兜底限制,避免程序完全卡死:
void golinego() {
  stroke(200, 200, 255);
  line(30, 30, 470, 470);
  int j = 30;
  int i = 30;
  // 增加最大循环次数兜底,画布最大对角线长度不到700,2000次足够覆盖所有可能的移动
  int maxLoop = 2000;
  int currentLoop = 0;
  while (dist(i, j, 470, 470) > 10 && currentLoop < maxLoop) {
    currentLoop++;
    stroke(0, 0, 180);
    circle(i, j, 1);
    if (pixelss[i+1][j+1]==0) {
        i++;j++;}
    if (pixelss[i][j]==1) {
      if (pixelss[i][j+1]==1) {
        if (pixelss[i+1][j]==0) {
          i++;}
      } else if (pixelss[i+1][j]==1) {
        if (pixelss[i][j+1]==0) {
          j++;}
      } else {
        i-=1;
        j-=1;
      }
    }
  }
}
  1. 优化寻路逻辑:当前的试探逻辑不具备绕障能力,只能沿斜向走,遇到连续障碍物就会卡住,你可以替换为BFS、A*等成熟的寻路算法实现绕障功能。
  2. 补充边界判断:当前golinego函数中访问pixelss[i+1][j+1]时没有做边界校验,当i或j接近499时会触发数组越界异常,建议和绘制逻辑一样加异常捕获或者边界判断。

内容的提问来源于stack exchange,提问作者Gergő Szabó

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 08:39:03