Вы получили ряд ответов, указывающих вам правильное направление, чтобы начать работу с пользовательским эффектом распыления. На основании вашего ответа на мой комментарий вам также понадобится алгоритм генерации случайных точек в радиусе.
Есть несколько способов сделать это, и, вероятно, наиболее очевидным было бы использовать полярные координаты , чтобы выбрать случайную точку, а затем преобразовать полярную координату в декартову (x, y) координату. визуализировать пиксель. Вот простой пример такого подхода. Для простоты я нарисовал простой эллипс 1x1 для каждой точки.
private Random _rnd = new Random();
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
int radius = 15;
using (Graphics g = this.CreateGraphics())
{
for (int i = 0; i < 100; ++i)
{
// Select random Polar coordinate
// where theta is a random angle between 0..2*PI
// and r is a random value between 0..radius
double theta = _rnd.NextDouble() * (Math.PI * 2);
double r = _rnd.NextDouble() * radius;
// Transform the polar coordinate to cartesian (x,y)
// and translate the center to the current mouse position
double x = e.X + Math.Cos(theta) * r;
double y = e.Y + Math.Sin(theta) * r;
g.DrawEllipse(Pens.Black, new Rectangle((int)x - 1, (int)y - 1, 1, 1));
}
}
}
В качестве альтернативы, вы можете случайным образом выбрать координаты x, y из прямоугольника, который соответствует окружности распыления, и с помощью уравнения окружности r ^ 2 = x ^ 2 + y ^ 2 проверить точку, чтобы определить, находится ли она внутри окружности, если он случайным образом выбирает другую точку и проверяет снова, пока у вас не будет точки, которая находится внутри круга. Вот краткий пример этого подхода
private Random _rnd = new Random();
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
int radius = 15;
int radius2 = radius * 2;
using (Graphics g = this.CreateGraphics())
{
double x;
double y;
for (int i = 0; i < 100; ++i)
{
do
{
// Randomy select x,y so that
// x falls between -radius..radius
// y falls between -radius..radius
x = (_rnd.NextDouble() * radius2) - radius;
y = (_rnd.NextDouble() * radius2) - radius;
// If x^2 + y^2 > r2 the point is outside the circle
// and a new point needs to be selected
} while ((x*x + y*y) > (radius * radius));
// Translate the point so that the center is at the mouse
// position
x += e.X;
y += e.Y;
g.DrawEllipse(Pens.Black, new Rectangle((int)x - 1, (int)y - 1, 1, 1));
}
}
}