Lokalizacja punktu

0

Cześć. Jestem trakcie pisania programu określającego czy punkt jest w środku czy na zewnątrz wielokąta. Niestety mam problem, ponieważ dla niektórych przypadków program wyświetla sprzeczne informacje np. dla punktu poza wielokątem daje True. Kod mojego algorytmu:

                                        int W = (x1 - x)*(b - b) - (y1 - y) * (a - 600);
							 int Wt = (a - x)*(b - b) - (b - y) * (a - 600);
							 int Ws = (x1 - x)*(b - y) - (y1 - y) * (a - y1);
							 
							 double t = (1.0*Wt) / (1.0 *W);
							 double s = (1.0 *Ws) / (1.0 *W); 
 

							 if (W == 0)
							 {

							 }
							 else
							 {
								 
								 spr = 1;
								 //c++;
							 }

							 if (t >= 0.0 && t <= 1.0 && s >= 0.0 && s <= 1.0)
							 {
								 spr = 1;
								 
							 }
							 else
							 {
								 spr = 0;
							 }
							 
							 if (spr == 1)
							 {
								 c++;
							 } 
						 }		 
					 }
					 
					

					 if (c % 2 != 0 && c>=1 )
					 {
						 MessageBox::Show("True");
					 }
					  else if(c% 2 == 0 || c == 0)
					 {
						// MessageBox::Show(Convert::ToString(c));
						 MessageBox::Show("False");
					 } 

Dzięki za wszelkie wskazówki.

0

Spróbuj w asyście boosta.

#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/geometries/polygon.hpp>
//...

Polygon poly;
//... construct the polygon

Point p(4, 1);

std::cout << "within: " << (boost::geometry::within(p, poly) ? "yes" : "no") << std::endl;

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.