线与无限高的圆柱
首先,直线和无限高的圆柱体表面相交的方法是将线的参数方程代入圆柱面方程求解得到。
假设坐标系轴向上,圆柱体的纵向和轴平行。也就是说,投影到平面时,是一个圆形。所以圆柱体表面的任意一点的的坐标都满足:
其中圆柱的中心坐标是:
直线的参数方程:
其中是直线上一点, 是直线的方向向量。将直线方程带入圆柱方程,可以得到关于的一元二次方程,即:
对应一元二次方程中:
如果,即线与Z轴平行,退化成一次方程。否则计算判别式。如果:
在相交的情况下,利用求根公式计算或
将 代入直线方程即可求出表面交点。
线段和有限高的圆柱
线段有可能在圆柱内,或者只有圆柱的上下圆相交,并不与圆柱表面相交。并且线段所在的直线与圆柱面的两个交点,可能都在圆柱高度范围外。所以分成两步:
- 是否能与圆柱上下表面相交。
- 如果1失败,则判断与圆柱表面是否相交。
是否能与圆柱上下表面相交。
1. 如果一端点在圆柱内部,则算相交。
判断端点在圆柱内很简单,只需其距离圆柱中心点小于半径,并且高度在范围内即可。
2. 否则是否和上下表面相交。
圆柱圆面的法线为 。面的方程可以表示为:
为平面内一点。线的参数方程依然可以用上面表示,只是让。其中分别为线段的终点和起点。这样线段内的点可以通过判断。
如果与平面平行,即:,要特殊处理。将直线参数方程代入圆面方程:
判断的范围即可。上面 分别换成上圆面和下圆面的圆心。
判断与圆柱表面是否相交。
如果上面条件都没满足,即端点不在内部,也不与圆面相交。那相交的话,只能与圆柱侧面相交。可以用直线与圆柱侧面相交的方法,计算交点。当然还是让,如果在线段内,在判断高度在范围内即可。