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\) 就在这条直线上。

浙公网安备 33010602011771号