Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Принадлежит ли точка многоугольнику - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Матрицы http://www.cyberforum.ru/cpp-beginners/thread570402.html
Из заданной матрицы A размером N*M получить матрицу В размером M*(N+M-1) по определенному на рисунке правилу. Недостающие элементы заменить нулями.
C++ Найти сумму ряда Найти сумму ряда с точностью до члена ряда, меньшего 0.0001 для заданного значения и сравнить эту сумму с функцией контроля. Для вычисления последующего значения члена ряда использовать... http://www.cyberforum.ru/cpp-beginners/thread570395.html
C++ MPEG2 - Program Map Table
Необходимо добавить еще один PID в таблицу PMT. На этапе сохранения самой таблицы решил сравнить CRC32, и они не сходяться! Пробывал разные полиномы( 0x04C11DB7 / 0xEDB88320 / 0x82608EDB ),...
ERROR что обозначает ошибка C++
Что обозначает такие ошибки и как их справить ERROR требуется выражение ERROR требуется указать на функцию(Указатель функции) ERROR Объявленный идентификатор ERROR не вереное значение Кто...
C++ Указатели на функции http://www.cyberforum.ru/cpp-beginners/thread570355.html
Народ! Прошу у вас помощи ещё раз! Дано такое задание: С заданной точность E (Е>0) вычислить площадь заштрихованной фигуры Метод решения уравнения: Уменьшения интервала и дробления Метод...
C++ Вычислить с заданной точностью значение функции , используя ее разложение в ряд: Вычислить с заданной точностью значение функции , используя ее разложение в ряд: подробнее

Показать сообщение отдельно
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
12.05.2012, 12:03
Цитата Сообщение от Gepar Посмотреть сообщение
lazybiz, но он не учитывает точки что идут на линиях соединяющих точки многоугольника
Ну тогда я думаю тебя устроит такой вариант:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#define fmin( a, b )    (((a) > (b)) ? (b) : (a))
#define fmax( a, b )    (((a) > (b)) ? (a) : (b))
 
int pointinpoly( double pgon[][2], int numverts, double x, double y )
{
    int     i, crossings = 0;
 
    for ( i = 0; i < numverts; i++ ) {
 
        double x1 = pgon[i][0];
        double y1 = pgon[i][1];
        double x2 = pgon[(i + 1) % numverts][0];
        double y2 = pgon[(i + 1) % numverts][1];
        double d = (y - y1) * (x2 - x1) - (x - x1) * (y2 - y1);
 
        if ( (y1 >= y) != (y2 >= y) ) {
            crossings += y2 - y1 >= 0 ? d >= 0 : d <= 0;
        }
 
        if ( !d && fmin( x1, x2 ) <= x && x <= fmax( x1, x2 )
                && fmin( y1, y2 ) <= y && y <= fmax( y1, y2 ) ) {
            return 1;
        }
    }
    return crossings & 1;
}
Он не такой быстрый как тот, но считает более правильно как мне кажется.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru