ds

/**
    递归写法
---------------
*/
void preOrder(bTree T){
  if(T!=null){
    visit(T);
    preOrder(T->lChild);
    preOrder(T->rChild);
  }
}

/**
    非递归写法
---------------
*/
void preOderStack(bTree T){
  stack s
  initial(s);
  bTree p = T;
  push(s,T);

  while(p || !stackEmpty(s)){
    if(p){
      visit(p);
      push(s,p);
      p = p->lChild;
    }else{
      pop(s,p);
      p = p->rChild;
    }
  }
}

在上述描述中,假设有三个点 \(p\)\(p_1\)\(p_2\),则可以得到两个向量 \(v_1 = p_1 - p\)\(v_2 = p_2 - p\)。接下来通过计算向量 \(v_1\) 和向量 \(v_2\) 的叉积得到一个新的向量 \(v\),这个新向量的三个分量分别为 \(v_x, v_y, v_z\),其中 \(v_z\) 就是上文提到的“z 分量”。

具体来说,可以使用以下公式计算向量 \(v_1\) 和向量 \(v_2\) 的叉积:

\[\begin{aligned} v_x &= (y_1 - y) \cdot (z_2 - z) - (z_1 - z) \cdot (y_2 - y)\\ v_y &= (z_1 - z) \cdot (x_2 - x) - (x_1 - x) \cdot (z_2 - z)\\ v_z &= (x_1 - x) \cdot (y_2 - y) - (y_1 - y) \cdot (x_2 - x) \end{aligned} \]

其中,\(x, y, z\) 分别表示点 \(p\) 在三个坐标轴上的坐标,\(x_1, y_1, z_1\) 表示点 \(p_1\) 在三个坐标轴上的坐标,\(x_2, y_2, z_2\) 表示点 \(p_2\) 在三个坐标轴上的坐标。

如果向量 \(v\)\(z\) 分量大于 \(0\),那么点 \(p\) 就在由点 \(p_1\) 和点 \(p_2\) 所连成的直线的左侧。如果 \(v_z < 0\),那么点 \(p\) 就在这条直线的右侧。如果 \(v_z = 0\),那么点 \(p\) 就在这条直线上。

posted @ 2023-03-27 21:53  jayus71  阅读(239)  评论(0)    收藏  举报