Если ограничение состоит в том, что все выходные точки находятся на поверхности, вам нужен последовательный метод адресации самой поверхности, а не беспокоиться о 3D-преобразовании поверхности для ваших точек.
Хакстастический способ сделать это будет создание UV-карты для вашего 3D-объекта, а затем случайным образом разброс точек в 2-х измерениях (выбрасывание точек, которые не попадали в действительную UV-оболочку). После того, как ваши UV-оболочки будут заполнены так, как вам хотелось бы, вы можете конвертировать ваши УФ-очки в barycentric coordinates, чтобы преобразовать эти 2-D точки обратно в 3-D точки: эффективно вы говорите: «Я 30% верхушки A, 30% вершина B и 40% вершины C, поэтому моя позиция (.3A + .3B + .4C)
Помимо простоты, еще одним преимуществом использования UV-карты является то, что она позволит вам настроить плотность и относительную важность из разных частей сетки: большая УФ-поверхность будет получать много разбросанных точек, а меньшая - меньше, даже если это не соответствует физическому размеру или граням.
Переход к 2D представит некоторые артефактов, потому что вы, вероятно, не сможете придумать УФ-карту, которая будет без растягивания и без шва, поэтому вы получите варианты из-за этого. Однако для многих приложений это будет хорошо, так как алгоритм очень прост и результаты легко настраиваются.
Я не использовал этот один, но это выглядит как оно основано на этом общем подходе: http://www.shanemarks.co.za/uncategorized/uv-scatter-script/
Если вам нужна более математически строгий метод, вы должны были бы любитель метод mesh parameterization: способ превратить ваш 3-й набор треугольников в согласованное пространство. В этой области много интересной работы, но было бы трудно выбрать конкретный путь, не зная приложения.
как делает поверхность выглядит? Я предполагаю, что вы хотите, чтобы точка была случайной, независимо от вашей локальной плотности треугольника. Я однажды сделал что-то подобное, и один из способов сделать это - создать случайные прямые линии, а затем «пересечь» их с поверхностью, т. Е. Взять вершину, ближайшую к линии, проецируя на перпендикулярную плоскость, а затем минимизируя сумма квадратов составляющих прогнозируемого расстояния. Теперь дело в том, как генерировать случайные прямые линии ... это зависит от того, какие поверхности у вас есть –