2.1 与球体的交点 -代数解

Posted tooyoungtsukasa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2.1 与球体的交点 -代数解相关的知识,希望对你有一定的参考价值。

   Rorigin?Ro?[Xo  Yo  Zo]

  Rdirection?Rd?[Xd  Yd  Zd]

当xd2+yd2+zd2=1 (i.e normalized)

 他定义了一个光线:

  即一个线上的点集      R(t)=Ro+Rd*t   where t>0  (A1)

  t<0的点全在光线源点后。至于t=0为什么不被当做光线上的点,这个问题将会放到‘精度问题‘的章节来解释。注意,虽然光线方向不需要进行标准化,但是还是建议使用标准化,否通,t将用方向向量的长度来表示距离。在相交测试前,对光线方向向量进行一次标准化。,以确保t将等于从光线原点到世界坐标系的距离。

  A1是光线方程的参数或者说是显式形式。这意味着光线上所有的点都可以通过改变t的值直接生成。

  球体定义:

     球心?Sc?[Xc  Yc  Zc]

     半径?Sr

     表面集合?[Xs  Ys  Zs]  where  (Xs-Xc)2+(Ys-Yc)2+(Zs-Zc)2=Sr2   (A2)

  曲面上的点不能直接生成,每个点都应该用隐式方程进行检测,如果满足条件,才是在曲面上的点。

  A1表示为方程组:

     X=Xo+Xd*t

     Y=Yo+Yd*t

     Z=Zo+Zd*t

  将球面[Xs  Ys  Zs]带入A1方程组:

     (Xo+Xd*t-Xc)2+(Yo+Yd*t-Yc)2+(Zo+Zd*t-Zc)2=Sr

     简化为:

    A*t2+B*t+C=0  (A5)

    A=Xd2+Yd2+Zd2=1

    B=2*(Xd*(Xo-Xc)+Yd*(Yo-Yc)+Zd*(Zo-Zc))

    C=(Xs-Xc)2+(Ys-Yc)2+(Zs-Zc)2-Sr

  注意A的系数(coefficient)一直为1,因为光线方向是标准化方向。

  解A5方程:

    技术分享图片

  b2-4ac<0,无交点。 【在[11]的5.5节有t0,t1更准确的提纯方式】

  t中更小的正实根时光线上最近的交点距离,即t*B最短。

  一旦t求出,则可推导实际的交点:

    技术分享图片

  =》曲面上的单位法向量可以很简单得出:

    技术分享图片

  如果光源在球内,那么rn应该取反,以便它指向光线。

  总结起来,代数解法步骤为:

    1,计算方程的A,B,C

    2,计算判别式(△)

    3,t0的计算和比较

    4,也许还有t1的ca,co

    5,计算交点

    6,计算法线

  

 





以上是关于2.1 与球体的交点 -代数解的主要内容,如果未能解决你的问题,请参考以下文章

cesuim 绘图贴模型怎么获取范围之内的三角网

OpenGL 中的射线球相交

cad三维制图中如何找到一条线与一个面的交点,如空间斜线与水平标高24M面的交点,如何找到该交点

判断一条线与四边形的交点

Ammo.js 自定义网格与球体碰撞

Three.js - 立方体和球体与平面奇怪地剪裁