在法线已知的平面上绘制垂直于直线的直线

Kit*_*adr 0 algorithm geometry unity-game-engine

我在法线向量已知的平面上有两个向量(Vector3)位置.我想要做的是在同一平面上画一条垂直于该线的直线.假设end1和end2是两个向量,表示原始行的末尾我现在正在尝试:

                    var line1 = end1 + ( (end2-end1)* 1 );
                    var rotatedLine = Quaternion.AngleAxis( 90, anchor.transform.rotation*Vector3.up ) * end1;
                    //Debug.DrawLine(end2, rotatedLine, Color.blue);
                    var newLine1 = Instantiate(line );
                    LineRenderer lr2 = newLine1.GetComponent<LineRenderer>();
                    lr2.SetPosition(0,end1);
                    lr2.SetPosition(1,rotatedLine);
Run Code Online (Sandbox Code Playgroud)

其中anchor.transform.rotation*Vector3.up表示平面的法线.但是,这不会产生所需的结果

小智 5

使用Cross product计算垂直线:

如果N是平面法线,则垂直线的方向是:

Vector3 dir = Vector3.Cross( N, ( end2 - end1 ).normalized );
Run Code Online (Sandbox Code Playgroud)

该行定义如下:

lr2.SetPosition( 0, end1 );
lr2.SetPosition( 1, end1 + dir );
Run Code Online (Sandbox Code Playgroud)

(使用Cross((end2 - end1).normalized,N);对于相反的方向.