Форум: "Игры";
Текущий архив: 2003.03.10;
Скачать: [xml.tar.bz2];
ВнизНормали Найти похожие ветки
← →
Gerda (2002-10-11 11:07) [0]Дарова мастера, я с таким вопросом:
имеется поверхность (3,4-уголиник) мне нужно зная координаты (абсцис,ординат и аппликат) наити нормаль к ней.
Как это сделать (формула), а то я искал, ничего подходящего пока нету.
Заранее благодарен.
← →
Sapersky_ (2002-10-11 11:21) [1]function PlaneNormal(Const v1, v2, v3: TD3DVector): TD3DVector;
Var va, vb, vc : TD3DVector;
begin
va:=VectorSub(v1,v2);
vb:=VectorSub(v3,v2);
vc:=VectorCrossProduct(va, vb);
Result:=VectorNormalize(vc);
end;
VectorCrossProduct - векторное произведение:
function VectorCrossProduct(const v1, v2: TD3DVector) : TD3DVector;
begin
result.x := (v1.y*v2.z) - (v1.z*v2.y);
result.y := (v1.z*v2.x) - (v1.x*v2.z);
result.z := (v1.x*v2.y) - (v1.y*v2.x);
end;
VectorNormalize - нормализация, вычисление длины и деление всех координат на неё.
VectorSub - вычитание векторов.
← →
Gerda (2002-10-11 11:30) [2]Sapersky_, пасиба. Я бацаю прогу ( http://delphi.mastak.ru/cgi-bin/download.pl?look=1&id=1025527080&n=1) без использования Директа, и Опэна, и проч... так мне нужна сама формула (из курса аналитической геометрии чтоли) расчета нормали.....мож поможеш ??
← →
k (2002-10-11 14:24) [3]всмотрись в мессагу Sapersky_ ты не видишь формулу?
есть треуголник, задаваемый векторами v1, v2, v3.
найдем 2 стороны
va = v1 - v2;
vb = v3 - v2;
т.е. наш треуг построен на этих двух векторах
векторное произведение дает vc = va X vb - вектор, перпендикулярный пл-ти треуг-а.
чтоб получить нормаль осталось привести его к единичной длине
n = vc/|vc|
|vc|(скаляр, число - длина вектора vc) = sqrt(sqr(x) + sqr(y) + sqr(z))
такие дела.
удачи
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2003.03.10;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.006 c