|
|
Check_Point_In_Poly.PAS |
|
{* Алгоритм "входит ли точка в обьект" *}Unit CHECK_POINT_IN_POLY;Interface Implementation Begin writeln('Алгоритм: Точка лежит внутри многоугольника, если кол-во точек пересечения нечетно. Все отрезки кроме горизонтальных проверяются на пересечение с горизонтальным лучом, выходящим из проверяемой точки. При попадании луча в вершину пересечение засчитывается только с теми отрезками, выходящими из вершины, для которых она является верхней.'); End. { Code by VanDamM // [WRC] Алгоритм: Точка лежит внутри многоугольника, если кол - во точек пересечения нечетно. Все отрезки кроме горизонтальных проверяются на пересечение с горизонтальным лучом, выходящим из проверяемой точки. При попадании луча в вершину пересечение засчитывается только с теми отрезками, выходящими из вершины, для которых она является верхней. } Program Check_Point_In_Poly; Uses Check_Point_In_Poly.pas; {* Эту строку можно удалить *} Uses Crt; {* Подключаем внешние файлы *} Type {* Используемые типы *} Point = Record { тип точка } x, y : integer; End; Var {* В работе нам потребуются переменные: *} PointXY : Point; { проверяемая точка } Poly : Array[0..24] Of Point; { массив вершин многоугольника } C : integer; { кол - во вершин многоугольника } i : integer; j : integer; Function Max( Num1, Num2 : integer ) : integer; Begin If Num1 > Num2 Then Max := Num1 Else Max := Num2; End; Function Min( Num1, Num2 : integer ) : integer; Begin If Num1 A.y) And (p[j].y > A.y) Then Continue; If (P[i].y < A.y) And (p[j].y < A.y) Then Continue; If Max(P[i].y, P[j].y) = A.y Then Inc(Count) {* Прибавим к Count единицу *} Else If Min(P[i].y, P[j].y) = A.y Then Continue Else Begin T := (A.y - P[i].y) / (P[j].y - P[i].y); If ((T > 0) And (T = A.x) Then Inc(Count); {* Увеличиваем Count на 1 *} End; End; PointInPoly := Count And 1; End; Begin ClrScr; {* Очистка экрана *} EnterData; WriteLn; {* Пропускаем одну строку *} If PointInPoly(PointXY, Poly, C) = 0 Then Write('Answer: Point out Of poly') Else Write('Answer: Point In poly'); ReadKey; {* Ждем нажатия любой клавиши *} End...... 07.08.2014 - Breakpoint - точка остановки 07.08.2014 - Топ-10 самых популярных приложений в Facebook 18.11.2013 - Панель управления и персонализация системы. Windows Vista 18.11.2013 - Логические и физические диски. Windows Vista 18.11.2013 - Удаление файлов и папок 01.11.2013 - Программирование дисковых подсистем: возможности 31.10.2013 - Windows8 или Windows7? 31.10.2013 - Windows8, игры |
|
Non-commercial fansite
|