program PointInPolygon typ Point = recor X, Y: Integer end va Polygon: array of Point P: Point N, i, j, Count: Integer function IsPointInPolygon(P: Point; Polygon: array of Point; N: Integer): Boolean va i, j: Integer Inside: Boolean begi Inside := False j := N - 1 for i := 0 to N - 1 d begi if (((Polygon[i].Y <= P.Y) and (P.Y < Polygon[j].Y)) o ((Polygon[j].Y <= P.Y) and (P.Y < Polygon[i].Y))) an (P.X < (Polygon[j].X - Polygon[i].X) * (P.Y - Polygon[i].Y) / (Polygon[j].Y - Polygon[i].Y) + Polygon[i].X) the Inside := not Inside j := i end IsPointInPolygon := Inside end begi N := 4 SetLength(Polygon, N) Polygon[0].X := 1; Polygon[0].Y := 1 Polygon[1].X := 2; Polygon[1].Y := 4 Polygon[2].X := 5; Polygon[2].Y := 5 Polygon[3].X := 4; Polygon[3].Y := 2 P.X := 3 P.Y := 3 if IsPointInPolygon(P, Polygon, N) the writeln('Точка принадлежит многоугольнику' els writeln('Точка не принадлежит многоугольнику') end.
Данный код определяет принадлежность точки P заданному выпуклому многоугольнику Polygon с помощью алгоритма Ray Casting. Точка считается принадлежащей многоугольнику, если луч, проведенный из этой точки в одном направлении, пересекает границу многоугольника нечетное количество раз.
На Pascal:
program PointInPolygontyp
Point = recor
X, Y: Integer
end
va
Polygon: array of Point
P: Point
N, i, j, Count: Integer
function IsPointInPolygon(P: Point; Polygon: array of Point; N: Integer): Boolean
va
i, j: Integer
Inside: Boolean
begi
Inside := False
j := N - 1
for i := 0 to N - 1 d
begi
if (((Polygon[i].Y <= P.Y) and (P.Y < Polygon[j].Y)) o
((Polygon[j].Y <= P.Y) and (P.Y < Polygon[i].Y))) an
(P.X < (Polygon[j].X - Polygon[i].X) * (P.Y - Polygon[i].Y) / (Polygon[j].Y - Polygon[i].Y) + Polygon[i].X) the
Inside := not Inside
j := i
end
IsPointInPolygon := Inside
end
begi
N := 4
SetLength(Polygon, N)
Polygon[0].X := 1; Polygon[0].Y := 1
Polygon[1].X := 2; Polygon[1].Y := 4
Polygon[2].X := 5; Polygon[2].Y := 5
Polygon[3].X := 4; Polygon[3].Y := 2
P.X := 3
P.Y := 3
if IsPointInPolygon(P, Polygon, N) the
writeln('Точка принадлежит многоугольнику'
els
writeln('Точка не принадлежит многоугольнику')
end.
Данный код определяет принадлежность точки P заданному выпуклому многоугольнику Polygon с помощью алгоритма Ray Casting. Точка считается принадлежащей многоугольнику, если луч, проведенный из этой точки в одном направлении, пересекает границу многоугольника нечетное количество раз.