private VelocityDistribution GetDistribution(Point sector, float amount, Velocity2dProbability probability) { var velocity = new Velocity2dProbability(probability.X.Quantizations); for (var i = -probability.X.Quantizations; i <= probability.X.Quantizations; i++) { if (Math.Sign(sector.X) == 0) { velocity.X[i] = GetInvProbability(probability.X, i); } else if (Math.Sign(sector.X) == Math.Sign(i) && i != 0) { velocity.X[i] = GetProbability(probability.X, i); } if (Math.Sign(sector.Y) == 0) { velocity.Y[i] = GetInvProbability(probability.Y, i); } else if (Math.Sign(sector.Y) == Math.Sign(i)) { velocity.Y[i] = GetProbability(probability.Y, i); } } return(new VelocityDistribution(sector, amount, velocity)); }
public VelocityGrid(Velocity2dProbability probability) { var leftX = GetLeft(probability.X); var rightX = GetRight(probability.X); var middleX = 1f - leftX - rightX; var downY = GetRight(probability.Y); var upY = GetLeft(probability.Y); var middleY = 1f - downY - upY; _distributions[0, 0] = GetDistribution(new Point(-1, -1), leftX * upY, probability); _distributions[1, 0] = GetDistribution(new Point(0, -1), middleX * upY, probability); _distributions[2, 0] = GetDistribution(new Point(1, -1), leftX * upY, probability); _distributions[0, 1] = GetDistribution(new Point(-1, 0), leftX * middleY, probability); _distributions[1, 1] = GetDistribution(new Point(0, 0), middleX * middleY, probability); _distributions[2, 1] = GetDistribution(new Point(1, 0), leftX * middleY, probability); _distributions[0, 2] = GetDistribution(new Point(-1, 1), leftX * downY, probability); _distributions[1, 2] = GetDistribution(new Point(0, 1), middleX * downY, probability); _distributions[2, 2] = GetDistribution(new Point(1, 1), leftX * downY, probability); }
public VelocityDistribution(Point velocity, float probability, Velocity2dProbability velocityProbability) { Velocity = velocity; Probability = probability; VelocityProbability = velocityProbability; }