Here is a solution, but not particularly cropped.
BAsed from the shape of your flake, you can calculate how close flakes can get to another flake without overlapping (specific rotation may be required). Let this distance between the centers be equal to d. Create a 2d array for your display with some resolution so that it fully contains your circle.
Array can have zero or 1 value. 0 means you can put a new snow scale there, so you cannot. Mark everything outside the circle as 1. Now select a random center for the flake. When you place it there, mark all the points inside the radius d around it with 1. Create another random point. If it is 1, continue to generate another random point until you find 0. When you find it, put a new snow flake there and mark everything around with a radius d. Sometimes, when the scales are too close, you will have to rotate them accordingly so that they do not overlap.
Once you reach the end, he can begin to take more and more to find an empty point. At this point, you can scan the array, make a list of empty points, and then just select random points from there.
source share