珊瑚虫 发表于 2017-10-24 15:30:28

如何快速判断射线所经过的规则长方体网格

本帖最后由 珊瑚虫 于 2017-10-24 15:33 编辑

问题描述:有一个规则长方体,角点坐标(xc,yc,zc)各方向长度分别为Lx,Ly,Lz; 将X,Y,Z方向被等分为nx,ny,nz份,形成nx*ny*nz个单元。在长方体内部有条射线,射线的方程为 x=m*t+x0;y=n*t+y0;z=p*t+z0;其中,t>0,(x0,y0,z0)为射线起点,(m,n,p)为射线方向向量。已知该点位于立方体内,如何快速判断出,射线所通过的单元。

珊瑚虫 发表于 2017-10-24 15:33:13

补充,规则长方体的角点坐标(xc,yc,zc)各方向长度分别为Lx,Ly,Lz

kerb 发表于 2017-10-25 11:13:03

XL=LX/NX
YL=LY/NY
ZL=LZ/NZ

0<KX<NX
0<KY<NY
0<KZ<NZ
如果射线穿过(KX,KY,KZ)单元
(KX-1)*XL<M*T+X0<KX*XL
(KY-1)*YL<N*T+Y0<KY*YL
(KZ-1)*ZL<P*T+Z0<KZ*ZL
求出T,判断之

li913 发表于 2017-10-26 13:25:49

1、求直线与 x1, x2...xn平面的交点,同样与y和z平面的交点;
2、所有这些交点,按t的大小排序,去掉重复点;
3、这就得到了n条线段,判断每条线段的中点即可。

珊瑚虫 发表于 2017-11-7 15:25:50

kerb 发表于 2017-10-25 11:13
XL=LX/NX
YL=LY/NY
ZL=LZ/NZ


这样做太慢

pasuka 发表于 2017-11-7 16:07:52

为啥不直接调用CAGL呢?
https://doc.cgal.org/latest/Box_intersection_d/index.html#Chapter_Intersecting_Sequences_of_dD_Iso-oriented_Boxes
https://doc.cgal.org/latest/AABB_tree/index.html#Chapter_3D_Fast_Intersection_and_Distance_Computation
或者
https://github.com/embree/embree

珊瑚虫 发表于 2017-11-14 17:21:52

pasuka 发表于 2017-11-7 16:07
为啥不直接调用CAGL呢?
https://doc.cgal.org/latest/Box_intersection_d/index.html#Chapter_Intersectin ...

大神 有没有用fortran 调用这个库的资料,一直在找没找到啊求指导

pasuka 发表于 2017-11-14 21:32:51

珊瑚虫 发表于 2017-11-14 17:21
大神 有没有用fortran 调用这个库的资料,一直在找没找到啊求指导

抱歉,没有具体实践过CGAL
唯一能够肯定的是:肯定没有官方fortran调用实例
不妨去论坛问问有没有C调用的范例
页: [1]
查看完整版本: 如何快速判断射线所经过的规则长方体网格