Учитывая три 3D точки (A, B, и C), как я вычисляю вектор нормали? Три точки определяют плоскость, и я хочу векторный перпендикуляр к этой плоскости.
Я могу получить демонстрационный код C#, который демонстрирует это?
Это зависит от порядка следования баллов. Если точки указаны в порядке против часовой стрелки, как видно из направления , противоположного нормальному, то просто вычислить:
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;
}
}
}
Сформировать перекрестный продукт векторов БА и БК. See http://mathworld.wolfram.com/CrossProduct.html.
Необходимо вычислить перекрестное произведение любых двух непараллельных векторов на поверхности. Так как у вас есть три точки, вы можете выяснить это, взяв перекрестное произведение, скажем, векторов AB и AC.
Когда вы это делаете, вы вычисляете нормальную поверхность , чему Википедия имеет довольно обширное объяснение.
.