Учитывая 3 pts, как я могу рассчитать нормальный вектор?
С учетом трех трехмерных точек (A, B и C), как я могу вычислить нормальный вектор? Три точки определяют плоскость, и я хочу, чтобы вектор перпендикулярен этой плоскости.
Могу ли я получить образец кода С#, который демонстрирует это?
Ответ 1
Это зависит от порядка точек. Если точки указаны в порядке против часовой стрелки, как видно из направления против нормального, то легко вычислить:
Dir = (B - A) x (C - A)
Norm = Dir / len(Dir)
где x - поперечное произведение.
Если вы используете OpenTK или XNA (имеете доступ к классу Vector3), то это просто вопрос:
class Triangle {
Vector3 a, b, c;
public Vector3 Normal {
get {
var dir = Vector3.Cross(b - a, c - a);
var norm = Vector3.Normalize(dir);
return norm;
}
}
}
Вам нужно вычислить cross product любых двух непараллельных векторов на поверхности. Поскольку у вас есть три очка, вы можете понять это, взяв кросс-произведение, скажем, векторов AB и AC.
Когда вы это сделаете, вы вычисляете нормальный уровень поверхности, из которых Wikipedia имеет довольно обширное объяснение.