Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.118.126.241] |
|
Страницы: (2) 1 [2] все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
Цитата MBo @ Следующая функция проверяет, находится ли точка P внутри тетраэдра ABCD. По сути это разложение вектора AP по векторам AB, AC, AD. Четырехгранную пирамиду нетрудно разбить на два тетраэдра. А для проверки, находится ли точка внутри пространственного угла, нужно убрать ограничение отсечения задней плоскостью - сравнение с Det function PtInTetrahedron(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, px, py, pz: Integer): Boolean; var Det, b, c, d: Integer; cdx, cdy, cdz: Integer; begin Result := False; bx := bx - ax; by := by - ay; bz := bz - az; cx := cx - ax; cy := cy - ay; cz := cz - az; dx := dx - ax; dy := dy - ay; dz := dz - az; px := px - ax; py := py - ay; pz := pz - az; cdx := cy * dz - cz * dy; cdy := cz * dx - cx * dz; cdz := cx * dy - cy * dx; Det := bx * cdx + by * cdy + bz * cdz; if Det <> 0 then begin b := px * cdx + py * cdy + pz * cdz; c := px * (dy * bz - dz * by) + py * (dz * bx - dx * bz) + pz * (dx * by - dy * bx); d := px * (by * cz - bz * cy) + py * (bz * cx - bx * cz) + pz * (bx * cy - by * cx); if Det > 0 then Result := (b >= 0) and (c >= 0) and (d >= 0) and (b + c + d <= Det) else Result := (b <= 0) and (c <= 0) and (d <= 0) and (b + c + d >= Det); end; end; Здравствуйте, спасибо огромное за функцию Подскажите, пожалуйста, откуда берутся условия (из каких алгебраических предпосылок) 1)(b + c + d <= Det) в первом случае 2)(b + c + d >= Det) во втором случае |
Сообщ.
#17
,
|
|
|
На двумерном примере:
Вектор AP есть линейная комбинация векторов AB, AC: AP = b * AB + c * AC Для точек внутри треугольника ABC коэффициенты положительны, и их сумма не превышает единицы (единица достигается только на ребрах). В данном случае коэффициенты не нормированы (делением на Det), и сравнение проводится с величиной Det |
Сообщ.
#18
,
|
|
|
Цитата MBo @ Спасибо |