三向量共面

发布时间 2023-03-26 23:05:58作者: GG_bo

原理:

1.根据解析几何原理,三向量共面有:\(r=x v_1+y v_2,x\in R,y\in R \dots 1\)
2. 特殊情况下,r 与 \(v_1或v_2\)共线(假设为\(v_1\)),则上式可转换为:

  1. \((1+x)r=y v_2\rightarrow v_1=\frac{1+x}{y}v_2 \dots 2\)
  2. 显然,对于任意的r和\(v_2\),不管 x或y 取何值,总有一个对应的y或x与之对应,使得上式成立。
  3. 一般情况下,这是一个二元方程且只有一个关系式(在实数域内有效)。在计算机编成中,对于连续值测试基本不可能。
  4. 变换:
    1. 将式1除以y,得:\(\frac{1}{y}r=\frac{x}{y}v_1+v_2 \dots 3\)
    2. 由于:\(\frac{1}{y}r\) 与r共线,所以要证明三向量共面,只需要:\(r=x v_1+v_2 \dots 4\)
    3. 于是,只需要:\(x=\frac{v_1}{r+v_2}\)

实现

  1. 实现
      template<size_t D,typename T>
      static bool coplane(glm::vec<D,T> const& v1,glm::vec<D,T> const& v2,glm::vec<D,T> const& v3) noexcept
      {
          auto tv1 { v3 + v2 };
          return collineation(tv1,v1);
      }