Skip to content

turbosnail/lfspolygon

Repository files navigation

lfspolygon

Use LFS Polygon Draw to identify new areas (streets) without the use of nodes on opened track like FE1X FE1Y (LFS 0.5 Z30 and higher) used jsDraw2D - http://jsdraw2d.jsfiction.com/

C++ code to find point in polygon

float x,y; // curent pozition

float polyX[] // array of X polygon points
float polyY[] // array of Y polygon points

int polySides // count of points


bool Check_Pos(int polySides,float polyX[],float polyY[],float x,float y)
{

    int      i, j=polySides-1 ;
    bool  oddNodes=false     ;

    for (i=0; i<polySides; i++)
    {
        if (polyY[i]<y && polyY[j]>=y
                ||  polyY[j]<y && polyY[i]>=y)
        {
            if (polyX[i]+(y-polyY[i])/(polyY[j]-polyY[i])*(polyX[j]-polyX[i])<x)
            {
                oddNodes=!oddNodes;
            }
        }
        j=i;
    }
    return oddNodes;
}

PHP code to find point in polygon(For use in PRISM plugins)

public function isInPoly($X, $Y, $Poly)
{
    $polySides = count($Poly);
    $j = $polySides - 1;
    $oddNodes = false;

    for ($i=0; $i < $polySides; $i++)
    {
        if ($Poly[$i]['y'] < $Y && $Poly[$j]['y'] >= $Y || $Poly[$j]['y'] < $Y && $Poly[$i]['y'] >= $Y)
        {
            if ($Poly[$i]['x'] + ($Y - $Poly[$i]['y']) / ($Poly[$j]['y'] - $Poly[$i]['y']) * ($Poly[$j]['x'] - $Poly[$i]['x']) < $X)
                $oddNodes = !$oddNodes;
        }
        $j = $i;
    }
    return $oddNodes;
}

C# code to find point in polygon

public static bool Check_Pos(int polySides, int[]polyX, int[]polyY, float x, float y) {
	int i,
	j = polySides - 1;
	bool oddNodes = false;

	for (i = 0; i < polySides; i++) {
		if (polyY[i] < y && polyY[j] >= y || polyY[j] < y && polyY[i] >= y) {
			if (polyX[i] + (y - polyY[i]) / (polyY[j] - polyY[i]) * (polyX[j] - polyX[i]) < x) {
				oddNodes = !oddNodes;
			}
		}
		j = i;
	}
	return oddNodes;
}