Возможно, для вашей задачи не критично, но так неправильно генерировать равномерно распределённые точки на диске.
angle = runif(n(), min = 0, max = 2pi),
r = runif(n(), min = 0, max = 1),
x = r cos(angle), y = r * sin(angle)
при таком подходе плотность точек в центре больше, чем по краям.
Вот тут описан правильный способ. https://stats.stackexchange.com/questions/120527/simulate-a-uniform-distribution-on-a-disc
Функции с одинаковым типом входного и выходного значения являются моноидами
Странное утверждение. Функция из А в А — это бинарное отношение на множестве А, то есть, подмножество декартова произведения (АхА). Моноид — полугруппа с единицей. Может, имелось в виду, что множетво всех таких фнкций образует моноид относительно операции композиции?
Возможно, для вашей задачи не критично, но так неправильно генерировать равномерно распределённые точки на диске.
angle = runif(n(), min = 0, max = 2pi),
r = runif(n(), min = 0, max = 1),
x = r cos(angle), y = r * sin(angle)
при таком подходе плотность точек в центре больше, чем по краям.
Вот тут описан правильный способ. https://stats.stackexchange.com/questions/120527/simulate-a-uniform-distribution-on-a-disc
У Эванса нет бороды. У Вернона тоже.
Странное утверждение. Функция из А в А — это бинарное отношение на множестве А, то есть, подмножество декартова произведения (АхА). Моноид — полугруппа с единицей. Может, имелось в виду, что множетво всех таких фнкций образует моноид относительно операции композиции?
Есть ещё библиотека LinqKit, тоже позволяющая комбинировать выражения. Было бы что-то вроде