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

Принадлежит ли точка многоугольнику - 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++ Вычислить с заданной точностью значение функции , используя ее разложение в ряд: Вычислить с заданной точностью значение функции , используя ее разложение в ряд: подробнее

Показать сообщение отдельно
Toshkarik
1147 / 864 / 51
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
11.05.2012, 17:41
Добил все таки задачу:
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
bool intersection( const double rayX, const double rayY, const double pointX1, const double pointY1, const double pointX2, const double pointY2 ) {
   double Ua = (( pointX2 - pointX1 ) * ( rayY - pointY1 ) - ( pointY2 - pointY1 ) * ( rayX - pointX1 )) / -( pointX2 - pointX1 );
   double Ub = ( rayX - pointX1 ) / ( pointX2 - pointX1 );
   
   if ( 0 <= Ub && Ub <= 1 && Ua >= 0 )
      return true;
   
   return false;   
}
 
double squareDistance( const double pointX1, const double pointY1, const double pointX2, const double pointY2 ) {
   return (( pointX1 - pointX2 ) * ( pointX1 - pointX2 ) + ( pointY1 - pointY2 ) * ( pointY1 - pointY2 ));
}
 
bool func( const double *const *const arr, const std::size_t size, const double pointX, const double pointY ) {
   unsigned int count = 0;
   double d1 = squareDistance( arr[ 0 ][ 0 ], arr[ 0 ][ 1 ], arr[ size - 1 ][ 0 ], arr[ size - 1 ][ 1 ]),
          d2 = squareDistance( arr[ 0 ][ 0 ], arr[ 0 ][ 1 ], pointX, pointY ),
          d3 = squareDistance( arr[ size - 1 ][ 0 ], arr[ size - 1 ][ 1 ], pointX, pointY );
   
   if ( d1 == d2 + d3 )
         return true;
   
   for ( std::size_t i = 1; i < size; i++ ) {
      d1 = squareDistance( arr[ i - 1 ][ 0 ], arr[ i - 1 ][ 1 ], arr[ i ][ 0 ], arr[ i ][ 1 ]);
      d2 = squareDistance( arr[ i - 1 ][ 0 ], arr[ i - 1 ][ 1 ], pointX, pointY );
      d3 = squareDistance( arr[ i ][ 0 ], arr[ i ][ 1 ], pointX, pointY );
      
      if ( d1 == d2 + d3 )
         return true;
         
      if ( intersection( pointX, pointY, arr[ i - 1 ][ 0 ], arr[ i - 1 ][ 1 ], arr[ i ][ 0 ], arr[ i ][ 1 ]))
         count++;
   }
   
   if ( intersection( pointX, pointY, arr[ 0 ][ 0 ], arr[ 0 ][ 1 ], arr[ size - 1 ][ 0 ], arr[ size - 1 ][ 1 ]))
         count++;
   
   if ( count % 2 )
      return true;
   
   return false;
}
Теперь если точка на ребре, то сразу возвращается true.

Цитата Сообщение от Gepar Посмотреть сообщение
Подскажите самый быстрый и оптимальный алгортим для выпуклых прямоугольников пожалуйста
Ну так попробуйте тот, который я предлагал изначально, методом разбивки на простые треугольники. Или, есть еще способ, через векторное произведение. О нем только читал мельком, попозже гляну что имеется ввиду.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.