public bool point_in_poly2D(Vector3 point, Sidedness side) { var prevIdx = 0; for (var i = NumPoints - 1; i >= 0; i--) { var prevVertex = Vertices[prevIdx]; var vertex = Vertices[i]; var diff = vertex - prevVertex; // 2d cross product difference? var diffCross = -(diff.Y * vertex.X) - (diff.X * vertex.Y) + (diff.X * point.Y) + (diff.Y * point.X); if (side != Sidedness.Positive) { if (diffCross < 0.0f) { return(false); } } else { if (diffCross > 0.0f) { return(false); } } prevIdx = i; } return(true); }
public PString(string value, int index, int endIndex, Pos pos, Pos defPos, Sidedness side, Option<object> userState) { Value = value; Index = index; EndIndex = endIndex; Pos = pos; DefPos = defPos; Side = side; UserState = userState; }
public PString(T[] value, int index, int endIndex, Pos pos, Pos defPos, Sidedness side, Option <object> userState) { Value = value; Index = index; EndIndex = endIndex; Pos = pos; DefPos = defPos; Side = side; UserState = userState; }
public PString(string value, int index, int endIndex, Pos pos, Pos defPos, Sidedness side, Option <object> userState) { Value = value ?? throw new ArgumentNullException(nameof(value)); Value = value; Index = index; EndIndex = endIndex; Pos = pos; DefPos = defPos; Side = side; UserState = userState; }
public PString SetSide(Sidedness side) => new PString(Value, Index, EndIndex, Pos, DefPos, side, UserState);
public PString <T> SetSide(Sidedness side) => new PString <T>(Value, Index, EndIndex, Pos, DefPos, side, UserState);