zoukankan      html  css  js  c++  java
  • 2.1 与球体的交点 -代数解

       RoriginRo☰[Xo  Yo  Zo]

      RdirectionRd☰[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,计算法线

      

  • 相关阅读:
    使用mongoose--写接口
    数据结构上机实验(2)
    时间复杂度十道练习题目
    Python网络爬虫实战入门
    区分矩阵的三大关系
    用python检查矩阵的计算
    ab矩阵(实对称矩阵)
    Python大数据应用
    数据结构上机实验(1)
    0038. Count and Say (E)
  • 原文地址:https://www.cnblogs.com/TooYoungTsukasa/p/9206722.html
Copyright © 2011-2022 走看看