Fortran Coder

标题: 如何快速判断射线所经过的规则长方体网格 [打印本页]

作者: 珊瑚虫    时间: 2017-10-24 15:30
标题: 如何快速判断射线所经过的规则长方体网格
本帖最后由 珊瑚虫 于 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
补充,规则长方体的角点坐标(xc,yc,zc)各方向长度分别为Lx,Ly,Lz
作者: kerb    时间: 2017-10-25 11:13
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
1、求直线与 x1, x2...xn平面的交点,同样与y和z平面的交点;
2、所有这些交点,按t的大小排序,去掉重复点;
3、这就得到了n条线段,判断每条线段的中点即可。
作者: 珊瑚虫    时间: 2017-11-7 15:25
kerb 发表于 2017-10-25 11:13
XL=LX/NX
YL=LY/NY
ZL=LZ/NZ

这样做太慢
作者: pasuka    时间: 2017-11-7 16:07
为啥不直接调用CAGL呢?
https://doc.cgal.org/latest/Box_ ... _Iso-oriented_Boxes
https://doc.cgal.org/latest/AABB ... istance_Computation
或者
https://github.com/embree/embree
作者: 珊瑚虫    时间: 2017-11-14 17:21
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
珊瑚虫 发表于 2017-11-14 17:21
大神 有没有用fortran 调用这个库的资料,一直在找没找到啊  求指导

抱歉,没有具体实践过CGAL
唯一能够肯定的是:肯定没有官方fortran调用实例
不妨去论坛问问有没有C调用的范例





欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2