• Предмет: Информатика
  • Автор: TequilaSunrise
  • Вопрос задан 1 год назад

помогите, пожалуйста, буду очень благодарна ❤️ (pascal)

Приложения:

Аноним: Задача нетривиальна в общем случае. Наиболее типичный алгоритм - "Метод трассировки луча с учетом количества пересечений". У него приличного объема реализация.
Аноним: Но можно попробовать его упростить))

Ответы

Ответ дал: contrlc
1
//Не советую разбираться в коде :))))
Ответ в файле:
vvvvvvvvvvvvvv
Приложения:

Аноним: Это не сработает, если стороны прямоугольника не параллельны осям координат
Аноним: А в условии не написано, что x2=x1 и т.п.
TequilaSunrise: это параллельности может не быть?
TequilaSunrise: этой*
Аноним: Конечно. Если четырехугольник Вы повернули на какой-то угол, ни одна из его сторон в общем случае не будет параллельна осям координат.
Ответ дал: Аноним
1
// PascalABC.NET 3.3, сборка 1627 от 27.01.2018
// Внимание! Если программа не работает, обновите версию!

begin
  var n:=4;
  var xp:=new real[n];
  var yp:=new real[n];
  Writeln('Введите парами координаты четырех вершин');
  for var i:=0 to n-1 do Read(xp[i],yp[i]);
  var (x,y):=ReadReal2('Введите координаты точки:');
  var (i,j,c):=(0,n-1,False);
  while i<n do begin
    if ((yp[i]<=y) and (y<yp[j]) or (yp[j]<=y) and (y<yp [i]))
      and (x<(xp[j]-xp[i])*(y-yp[i])/(yp[j]-yp[i])+xp[i]) then c:=not c;
    j:=i;
    i+=1;
    end;
  if c then Writeln('Внутри')
  else Writeln('Не внутри')
end.

Примеры
Введите парами координаты четырех вершин
-5 -3.7 -5 4 8.1 4 8.1 -3.7
Введите координаты точки: 1 2.6
Внутри

Введите парами координаты четырех вершин
-5 -3.7 -5 4 8.1 4 8.1 -3.7
Введите координаты точки: 3 -3.7001
Не внутри
Вас заинтересует
10 месяцев назад