给定 3D 空间中的一条线段(或多段线段)。您需要使用用户指定的特定倾斜角度(以度为单位)构建选定线段的法线。
如果倾斜角度指定为 0 到 90(含),则旋转角度是正确的,但是,如果角度大于 90,则旋转角度为相反方向。例如,如果输入 100 度的值,则倾斜角度将变为 80 度;如果指定 120 度,则为 60 度。
此外,任何角度的法线都应顺时针构建。
如果您能给我解释一下垫子,我将非常感激。这个问题的一部分...
PS 全局变量Angle已经转换为弧度了。
if (Angle != 0)
{
Double cos = Math.Cos(Angle);
Double sin = Math.Sin(Angle);
Double tan = Math.Tan(Angle);
Vertex VA = new Vertex(0, 0, 1);
Vertex axisN = GetULikeMatrix().TransformNormal(VA).Normalize();
Vertex initialPoint = MV.Inverse().Transform(Point1);
Vertex targetPoint = MV.Inverse().Transform(V);
Double edgeLength = new Edge(initialPoint, targetPoint).Length();
Double height = edgeLength * Math.Abs(tan);
// Задается угол поворота с помощью тангенса.
V = targetPoint + axisN * height;
if (Math.Round(cos, 3) == 0)
{
if (sin > 0) V = initialPoint + axisN * edgeLength;
if (sin < 0) V = initialPoint - axisN * edgeLength;
}
// Задается необходимая длина.
V = initialPoint + (V - initialPoint).Normalize() * edgeLength;
V = MV.Transform(V);
}
我不明白你在说什么,代码中有很多未声明的标识符。我最近解决了类似的问题,这是一个Python函数,它找到一个垂直于
a以弧度为单位旋转角度的向量的向量alpha。如果向量a与向量 不重合z,则将“向上”方向作为原点(零角度)。在其他情况下,采用其他坐标轴之一。解释