Форум: "Потрепаться";
Текущий архив: 2002.02.14;
Скачать: [xml.tar.bz2];
Вниз... а при нем задача... Найти похожие ветки
← →
Wetnose (2001-12-26 08:59) [35]классический вариант:
type
TSide = (side_p, side_m, side_0);
TSides = set of TSide;
function InOnTr(p, a, b, c: TPoint): TSide;
var side: TSides;
function Inside(d, e, f: TPoint): TSide;
var r1, r2: real;
begin
r1 := ((p.x-d.x)*(e.y-d.y))/(e.x-d.x)+d.y-p.y;
r2 := ((f.x-d.x)*(e.y-d.y))/(e.x-d.x)+d.y-f.y;
if r1 * r2 < 0 then Result := side_m else
if r1 * r2 > 0 then Result := side_p else
Result := side_0;
end;
begin
side := [Inside(a, b, c), Inside(b, c, a), Inside(c, a, b)];
if (side * [side_p, side_m]) = [side_p, side_m] then Result := side_m else
if side_0 in side then Result := side_0 else
Result := side_p;
end;
пример вызова:
case InOnTr(Point(15, 20), Point(10, 30), Point(20, 10), Point(30, 30)) of
side_p: ShowMessage("Точка пренадлежит треугольнику");
side_m: ShowMessage("Точка не пренадлежит треугольнику");
side_0: ShowMessage("Точка лежит на стороне треугольника");
end;
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2002.02.14;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.005 c