Авторизация

Логин: Пароль:
Регистрация Забыли свой пароль?

Помогите с решением задачи

Страницы: 1
Помогите с решением задачи, Помогите найти решение
Условие: даны 5 точек, первые четыре точки последовательно соединены образуя вершины четырехугольника. Определить принадлежит ли 5 точка плоскости четырехугольника.
Пример: A(1;1), B(1;10), C(10;10), D(10;1), E(5;5) Ответ: yes
Для выпуклого четырёхугольника проверь, принадлежит ли точка каждой из четырёх полуплоскостей, образованных сторонами четырёхугольника.
Код
var
  s1,s2,s3:integer;
  function Side(pX1, pY1, pX2, pY2: Integer): Integer;
  begin
    Result:=(pY2-pY1)*(X0-pX1)-(pX2-pX1)*(Y0-pY1);
    if Result > 0 then
      Result:=1
    else
    if Result < 0 then
      Result:=-1
    else
    if not (((X0-pX1) xor (X0-pX2) < 0) or ((Y0-pY1) xor (Y0-pY2) < 0)) then
      Result:=2;      //точка на продолжении отрезка -> вне треугольника
    //else Result:=0   //точка на отрезке
  end;
begin
  s1:=Side(X1,Y1,X2,Y2);
  s2:=Side(X2,Y2,X3,Y3);
  s3:=Side(X3,Y3,X1,Y1);
  Result:=(s1 and s2 and s3 <= 0) or (s1 or s2 or s3 = 1);
end;


здесь для трех вершин, знак возвращаемый функцией Side должен совпадать для всех точек
для любого количества точек подойдет
Страницы: 1
Читают тему (гостей: 1, пользователей: 0, из них скрытых: 0)