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

光线追踪场景图元相交代码改写后异常问题咨询

光线追踪相交计算代码重构后的问题分析与修复

两段代码的核心差异有两处,直接导致重构后的代码失效:

问题1:未处理图元类型不匹配的兜底情况

原列表推导式最后有else (None, None)的兜底逻辑,用来处理s是列表但既不是'sphere'也不是'plane'的情况。但重构后的for循环里缺少这个分支,当遇到这类非法图元时,变量a会未定义,执行append操作时直接抛出NameError。

问题2:列表引用错误

distances = hit_orientation = []这种写法会让两个变量指向同一个列表对象,后续对任意一个列表执行append操作,另一个会同步变化,完全不符合分别存储距离和朝向的需求。


修复后的代码

distances = []
hit_orientation = []
for s in Sc['scene_primitives']:
    if isinstance(s, list):
        if s[0] == 'sphere':
            a = sphere_intersect(s, ray['origin'], ray['dir'])
        elif s[0] == 'plane':
            a = plane_intersect(s, ray['origin'], ray['dir'])
        else:
            # 补上原代码的兜底逻辑
            a = (None, None)
    else:
        a = s.intersect(ray['origin'], ray['dir'])
    distances.append(a[0])
    hit_orientation.append(a[1])

修复说明

  1. 分开初始化distances和hit_orientation,确保两个列表相互独立;
  2. 在s为列表的分支中添加else块,补上原代码的兜底逻辑,避免a未定义的错误。

内容的提问来源于stack exchange,提问作者FrostDream

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 21:12:06