首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyVista ray_trace

PyVista ray_trace
EN

Stack Overflow用户
提问于 2022-03-13 12:10:30
回答 1查看 124关注 0票数 0

我正在开发一个FoV应用程序。目标很简单-你有一个车载传感器与特定的FoV形成单独的射线。在车前,我设置了几个障碍物,它们应该调整与障碍物碰撞的每一条射线的长度。此外,当我旋转FoV的一些边缘,我需要光线调整车辆的网格-你的车也可能是一个障碍。

我已经成功地完成了这两种条件(条件1射线长度是由障碍物调整的,但不是由车辆本身调节的;条件2射线是通过与车辆自身网格的碰撞来调整的,而不是由障碍物调整的),使用PyVista的ray_trace,但是我很难将两者结合起来,所以当你旋转传感器(可以在应用程序中使用滑块完成)时,光线由车辆和障碍物进行调整。

开始和结束都是点的数组,它们形成一条射线。然后使用clipped_ends/starts形成调整后的光线。

这是我尝试过的两种方法,imho的潜力最大--我试图将两个数组与numpy.concatenate合并,并比较两条调整后的射线的长度,所以代码使用了较短的射线。

这是我在pyhton的第一个真正的项目,我会很高兴听到每一个建议。提前感谢

代码语言:javascript
复制
[starts, ends] = rays
adjusted_starts = []
clipped_ends = []

for i in range len(starts)):
    raystart = starts[i]
    rayend = ennds[i]

  points, ind = vehicle.ray_trace(sensor_position, rayend, first_point=True)
    
  for obstacle in obstacles:
      points_obs, ind_obs= obstacle.ray_trace(raystart, rayend, first_point=True)
  if len(points) > 0:
    #loop replacing ray ends with points obtained by ray_trace
EN

回答 1

Stack Overflow用户

发布于 2022-03-16 17:01:28

OKey,对于任何觉得这很有帮助的人来说,我最终还是解决了这个问题:

正确的方法是比较调整后的射线的长度。您必须小心从ray_trace返回的空值,这表明没有任何交集。我指定了变量dis, dist_obs = 0, 0和- dist_obs -腿的射线与障碍物碰撞,射线与车辆碰撞的长度。

如果您的ray_trace()返回不是空的--,请注意这一步!!points = points.astpye('float64') --对于points_obs也是如此,否则我得到了一个非数字类型的bcs错误。然后,你可以计算距离,我用np.linalg.norm

如果它是空的,那么设置距离dist = np.infty,对dist_obs也是一样。

然后比较distdist_obs,并使用较短的一个作为射线的端点

希望有人会觉得这很有帮助,如果是的话,谢谢你的阅读和好运。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71456628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档