I need to write a function that will calculate if a point is inside polygon (true/false). Polygon always contains 4 points. I'm reading polygons and points from SVG file
<g id="polygons">
<g id="LWPOLYLINE_183_">
<polyline class="st10" points="37.067,24.692 36.031,23.795 35.079,24.894 36.11,25.786 37.067,24.692 " />
</g>
<g id="LWPOLYLINE_184_">
<polyline class="st10" points="35.729,23.8 35.413,23.516 34.625,24.39 34.945,24.67 35.729,23.8 " />
</g>
<g id="LWPOLYLINE_185_">
<polyline class="st10" points="34.483,24.368 33.975,23.925 34.743,23.047 35.209,23.454 34.483,24.368 " />
</g>
<g id="LWPOLYLINE_227_">
<polyline class="st10" points="36.593,22.064 36.009,21.563 35.165,22.57 35.736,23.061 36.593,22.064 " />
</g>
</g>
<g id="numbers">
<g id="TEXT_1647_">
<text transform="matrix(0.7 0 0 1 34.5876 23.8689)" class="st12 st2 st13">169</text>
</g>
<g id="TEXT_1646_">
<text transform="matrix(0.7 0 0 1 35.1049 24.1273)" class="st12 st2 st13">168</text>
</g>
<g id="TEXT_1645_">
<text transform="matrix(0.7 0 0 1 35.924 24.7302)" class="st12 st2 st13">167</text>
</g>
<g id="TEXT_1643_">
<text transform="matrix(0.7 0 0 1 36.0102 22.4477)" class="st12 st2 st13">174</text>
</g>
</g>
So for polyline it would be the first 4 sets of coordinates and for text X and Y are last 2 numbers in matrix brackets. Also don't know if that point for text is the center of text or bottom left corner (suppose it's this).
So far I got all coordinates for points and polygons in lists so I'm cross checking that way.
Solved it this way:
public static bool IsPointInPolygon4(PointF[] polygon, PointF testPoint)
{
bool result = false;
int j = polygon.Count() - 1;
for (int i = 0; i < polygon.Count(); i++)
{
if (polygon[i].Y < testPoint.Y && polygon[j].Y >= testPoint.Y || polygon[j].Y < testPoint.Y && polygon[i].Y >= testPoint.Y)
{
if (polygon[i].X + (testPoint.Y - polygon[i].Y) / (polygon[j].Y - polygon[i].Y) * (polygon[j].X - polygon[i].X) < testPoint.X)
{
result = !result;
}
}
j = i;
}
return result;
}