Подогнать поверхность от 3 до 100 точек, где значения z являются трехмерными - PullRequest
0 голосов
/ 06 июля 2018

Я оказался в довольно большой проблеме. Я средний по математике, и мне нужно решить что-то, что не очень освещается в интернете.

Моя проблема: у меня есть 2D-пространство, определенное X и Y. Это пространство просто пространство для рисования. Я хочу присвоить конкретному X, Ys цвет со значениями RGB.

Итак, скажем, у меня есть 4 точки с определенной позицией в XY и цветом в Z:

  1. [0,0, [255,0,0]]
  2. [0,10, [0,255,0]]
  3. [10,10, [0,0,255]]
  4. [5,5, [0,0,0]]

и мое пространство для рисования xy: 15x15. И я хочу распределить цвета по всем пустым точкам

Для меня это довольно деликатная проблема, потому что ось Z сама по себе является трехмерным пространством.

Все мое намерение - создать цветную карту, в которой точки 1,2,3,4 имеют плавный переход между ними. Я могу решить это в 1D, где переход между 2 точками. Но мне нужно создать 2D цветовую карту в пространстве рисования XY на основе подгонки поверхности к этим 4 точкам, которые зависят как от пространства 3D-RGB, так и от расстояния между ними в пространстве рисования XY.

Заранее спасибо за помощь

1 Ответ

0 голосов
/ 06 июля 2018

Вы не показываете какой-либо алгоритм или код, поэтому я просто объясню алгоритм высокого уровня. Если вам нужно больше деталей, кода или математических формул, покажите больше своей работы, а затем спросите. Вы не объясняете, что вы подразумеваете под «плавным переходом», - здесь есть несколько значений. Это приведет к непрерывному затенению, но может оказаться недостаточно плавным для ваших целей.

Сначала, учитывая ваши точки в прямоугольном пространстве рисования, найдите диаграмму Вороного для этих точек. Это делит пространство рисования на выпуклые многоугольники, каждый многоугольник вокруг одной из ваших точек.

Для каждой вершины на диаграмме Вороного определите, какие точки находятся ближе всего к вершине - обычно будет только три из ваших точек, но их может быть больше. Затем в этой точке вершины назначьте цвет, который является средним значением RGB для ближайших заданных точек. Таким образом, усредните значения R и значения G и значения B. отдельно.

Для любой точки многоугольника Вороного ребро ее цвет представляет собой средневзвешенное значение двух цветов в конечных точках. То есть Если точка составляет одну треть расстояния от одного конца, ее значение RGB равно одной трети расстояния от значений в конечных точках.

Наконец, для любой точки внутри многоугольника Вороного вычислите луч из точки, которая определила этот многоугольник ("центральная точка"), через текущую точку, на которую вы смотрите. Найдите, где этот луч пересекает многоугольник. Тогда значение RGB является средневзвешенным значением значений центральной точки и точки пересечения многоугольника.

Самая сложная часть из всего, что найти диаграмму Вороного. Алгоритм Фортуны может сделать это в разумные сроки. Вы, вероятно, можете найти библиотеку, чтобы сделать это для вас на выбранном вами языке программирования.


Другой алгоритм - начать с триангуляции заданных вами точек и углов области рисования. Тогда цвет любой точки в треугольнике - это средневзвешенное значение цветов вершин. Это будет автоматически согласовано для точек на вершинах или ребрах треугольников, так что это, вероятно, проще, чем мой предыдущий алгоритм. Трудность здесь заключается в поиске триангуляции (любой подойдет).

...